Ich versuche ImageMagick zu starten, ohne das Dateisystem zu berühren: Bilddaten werden aus dem Speicher / dem Netzwerk gelesen und als Blob .
ImageMagick versucht jedoch ständig temporäre Dateien zu schreiben, die entweder mein Testsystem wegen abgebrochener / fehlgeschlagener Tests füllen oder Probleme auf Systemen mit extrem langsamen Festplatten verursachen: Es ist eine seltsame Einschränkung, aber viele meiner Konvertierungs-Hosts sind eingebettet ähnliche Systeme mit Block-Geräten, die extrem sind, reagieren langsam auf Operationen, auch stat()
s.
Fragen:
Gibt es eine Möglichkeit, ImageMagick so zu konfigurieren, dass er die Festplatte während der Bildverarbeitung nicht berührt? Angenommen, alle von ImageMagick benötigten Module wurden bereits geladen, und keine der ImageMagick-Funktionen, die Farmen verarbeiten, werden verarbeitet sprechen mit dem Dateisystem wird verwendet.
Welche Nebenwirkungen hat das? Ich bin in Ordnung mit der Verarbeitung, die nicht in den Speicher passen wird fehlschlagen, anstatt auf die Festplatten zurückfallen.
Ich konvertiere mit den C ++ - oder Perl ImageMagick-APIs, nicht mit dem Dienstprogramm convert
. Wenn eine andere Bindung Unterstützung dafür bietet, bin ich in Ordnung, Plattformen zu wechseln.
Was ich versucht habe
MAGICK_TEMPORARY_PATH
auf verschiedene Orte gesetzt, einschließlich /dev/null
auf POSIX. /dev/null
scheint manchmal zu funktionieren, aber meine Zielsysteme sind nicht POSIX, also bin ich mir nicht sicher, ob ich darauf zählen kann. Anstatt das temporäre Dateiverwaltungssystem zu täuschen, würde ich etwas bevorzugen, dem ich vertrauen kann, um die Notwendigkeit für temporäre Dateien an erster Stelle zu deaktivieren. registry:temporary-path
mit ähnlichen Ergebnissen verwendet. /dev/null
oder ein nicht beschreibbarer Speicherort) scheint häufig dazu zu führen, dass temporäre Dateien in dem Verzeichnis erstellt werden, aus dem mein Programm gestartet wird. Wenn dieses Verzeichnis nicht schreibbar ist, habe ich gesehen, dass temporäre Dateien im Verzeichnis /tmp
des Systems erstellt wurden, auch wenn der Code angewiesen wurde, sie nicht zu verwenden. Dies scheint in Ausnahmefällen zu geschehen (z. B. segfauling / OOMing / kill -9
'd Situationen), also kann ich feststellen, dass Dateien an diesen Stellen normalerweise erstellt werden, aber normalerweise bereinigt werden. Der Trick besteht darin, MAGICK_DISK_LIMIT=0
und MAGICK_AREA_LIMIT
/ MAGICK_AREA_LIMIT
auf einen Wert zu setzen, der größer ist als der vom Programm maximal benötigte Speicher.
Wenn ImageMagick dieses Speicherlimit überschreitet, wird es mit einer Nachricht wie folgt abstürzen:
%Vor% Sie können die Standardgrenzen von ImageMagick anzeigen, indem Sie identify -list resource
Tags und Links c++ perl imagemagick temporary-files tmp