我正在尝试在不接触文件系统的情况下运行ImageMagick:图像数据从内存/网络读取,并以Blob的形式写回套接字。
但是,ImageMagick不断尝试写临时文件,这要么由于测试中断/失败而填满我的测试系统,要么在磁盘极度缓慢的系统上引起问题:这是一个奇怪的限制,但我的许多转换主机都是类似嵌入式系统的块设备,对任何操作的响应都非常缓慢,即使是stat()
也是如此。
问题:
是否有一种方法可以配置ImageMagick在图像处理过程中不接触磁盘?假设ImageMagick将使用的所有必需模块已加载,并且将不使用将处理任务分配给与文件系统交互的子进程的任何ImageMagick功能。
这样做会有什么副作用?如果无法适应内存的处理将失败而不是回退到磁盘,我可以接受。
我使用C ++或Perl ImageMagick API进行转换,而不是使用convert
实用程序。但是,如果另一个绑定支持此功能,则可以切换平台。
我尝试过的
- 我已将
MAGICK_TEMPORARY_PATH
设置为各种位置,包括POSIX上的/dev/null
。/dev/null
有时似乎有效,但我的目标系统不是POSIX,因此我不确定是否可以依靠它。与愚弄临时文件管理系统不同,我更喜欢某些可以信任以在第一次禁用临时文件需要的东西。 - 我使用了
registry:temporary-path
选项,结果类似。 - 将各种临时路径选项设置为不存在/无法使用的位置(例如
/dev/null
或不可写位置)通常会导致在启动我的程序的目录中创建临时文件。如果该目录不可写,即使告诉代码不要使用它,我也曾看到临时文件在系统/tmp
目录中创建。这些似乎发生在异常情况下(例如segfaulting/OOMing/kill -9
'd),因此我认为文件通常可能会在这些位置创建,但通常会被清除。
/dev/shm
或类似的选项。这两种选项都需要代码处理之前硬件中止(崩溃、段错误等)运行留下的混乱,以及后续运行必须清理它,因此并不理想。自动清理/tmp并没有什么作用,因为文件系统访问仍然必须发生(并减慢所有操作)。 - Zac BMAGICK_DISK_LIMIT
设置为零并增加MAGICK_MEMORY_LIMIT
? - Finbar Crago