Python Wand генерирует много временных файлов
Мы используем Python Wand под Celery для обработки множества картинок. На некоторых наших серверах наше лечение иногда оставляет много временных файлов, например:
$ ls -lh /tmp/
-rw------- 1 ubuntu ubuntu 1.9M Apr 1 04:35 magick-y1yKKiVZ
-rw------- 1 ubuntu ubuntu 1.9M Apr 1 04:41 magick-Y22P6McK
-rw------- 1 ubuntu ubuntu 1.9M Apr 1 04:37 magick-YaaSIYrk
-rw------- 1 ubuntu ubuntu 1.9M Apr 1 04:39 magick-YEkn4H15
-rw------- 1 ubuntu ubuntu 1.9M Apr 1 04:39 magick-yf2Vrfwi
-rw------- 1 ubuntu ubuntu 1.9M Apr 1 04:38 magick-YIYTaArn
-rw------- 1 ubuntu ubuntu 199K Apr 1 04:43 magick-YLM5wYm9
-rw------- 1 ubuntu ubuntu 199K Apr 1 04:43 magick-YLo5SeVp
[...]
Есть ли способ очистить Wand после того, как он заработал на каком-то файле? Если это ожидаемое поведение, есть ли способ отладить это и узнать, какое изображение создало какой временный файл, например, поместив оператор log?
Спасибо
1 ответ
Простой способ: в настройках вашей среды MAGICK_TMPDIR=/home/somewhere
а также rm magick-*
эта папка в вашем crontab.
Трудный путь: примените этот путь к ImageMagick перед компиляцией:
--- pristine/imagemagick-6.5.7.8/magick/resource.c 2009-10-26 16:52:10.000000000 +0300
+++ libm/imagemagick-6.5.7.8/magick/resource.c 2010-09-28 19:18:39.000000000 +0400
@@ -329,6 +329,7 @@
static void *DestroyTemporaryResources(void *temporary_resource)
{
(void) remove((char *) temporary_resource);
+ RelinquishMagickMemory(temporary_resource);
return((void *) NULL);
}
@@ -474,10 +475,10 @@
(void) LockSemaphoreInfo(resource_semaphore);
if (temporary_resources == (SplayTreeInfo *) NULL)
temporary_resources=NewSplayTree(CompareSplayTreeString,
- RelinquishMagickMemory,DestroyTemporaryResources);
+ DestroyTemporaryResources, NULL);
(void) UnlockSemaphoreInfo(resource_semaphore);
resource=ConstantString(path);
- (void) AddValueToSplayTree(temporary_resources,resource,resource);
+ (void) AddValueToSplayTree(temporary_resources,resource,NULL);
return(file);
}