2014-04-01 9 views
9

Wir verwenden Python Wand unter Sellerie, um eine Menge Bilder zu verarbeiten. Auf einigen unsere Server, unsere Behandlung hinterlässt manchmal viele temporären Dateien hinter, z.B .:Python Wand generiert viele temporäre Dateien

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

Gibt es eine Möglichkeit Wand bis zu machen reinigen, nachdem es auf einige Datei gearbeitet? Wenn es das erwartete Verhalten ist, gibt es eine Möglichkeit, dies zu debuggen und zu wissen, welches Bild welche temporäre Datei erstellt hat, indem Sie zum Beispiel eine Protokollanweisung erstellen?

Dank

+3

Es ist nicht das erwartete Verhalten und erfolgt durch ImageMagick, nicht Stab. – minhee

Antwort

2

einfache Art und Weise: In Ihrer Umgebung Einstellungen zeigen MAGICK_TMPDIR=/home/somewhere und rm magick-*, die in Ihrer crontab Ordner.

harter Weg: Tragen Sie diesen Weg zu ImageMagick vor dem Kompilieren:

--- 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); 
}