2014-04-01 66 views
9

我們使用Celery中的Python Wand處理大量圖片。 在一些我們的服務器,我們的治療有時也留下了大量的臨時文件的背後,例如:Python Wand生成大量臨時文件

$ 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 [...]

有沒有辦法讓魔杖清理後,它的工作的一些文件? 如果這是預期的行爲,有沒有一種方法來調試這個,並知道哪個圖像創建哪個臨時文件,例如通過放置一個日誌語句?

感謝

+3

這不是預期的行爲,並通過ImageMagick的進行,而不是魔杖。 – minhee

回答

2

簡單的方法: 在您的環境設置指向MAGICK_TMPDIR=/home/somewhererm 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); 
}