Python-Wand序列无法从内存中清除

Ner*_*ull 7 imagemagick wand

如果我做以下事情

for root, dirs, files in os.walk(myDir):
  for myFile in files:
    with Image(filename=myFile) as img:
      with Image(image=img) as main:
        print main.sequence[0].width
Run Code Online (Sandbox Code Playgroud)

我使用Wand最终导致内存故障.

我确定它的.sequence部分.如果我删除它,它的罚款.我已经阅读了所有我能在序列上找到的内容,它是一个Image vs SingleImage.

SingleImage序列部分保留在内存中.我试过使用以下内容:

main.sequence[0].destroy()
Run Code Online (Sandbox Code Playgroud)

但它并没有摆脱记忆中的形象.

我正在处理数千个文件,但是在几十个文件之后我就会出现分段错误.

我很确定它关闭了'主'图像.只是不是main.sequence SingleImage.

有办法强行关闭吗?

我应该说我也试过这个

with Image(image=img.sequence[0]) as main:
Run Code Online (Sandbox Code Playgroud)

认为With语句将间接关闭它.但事实并非如此.

有人可以帮忙吗?

emc*_*lle 1

首先要做的事情 -使用 wand 提交错误。如果分配了图像序列,则wand.image.Image.destroy不会进行清理。好发现!wand.image.Sequence

你是绝对正确的main.sequence[0].destroy()SingleImage但是,您只能释放序列中分配的第一个。所以img.sequence[1:]仍然在记忆中设置。一个不太优雅的解决方案是迭代并销毁所有SingleImage的。

for root, dirs, files in os.walk(myDir):
  for myFile in files:
    with Image(filename=myFile) as img:
      with Image(image=img) as main:
        first = True
        for frame in main.sequence:
           if first:
             print frame.width
             first = False
           frame.destroy()
Run Code Online (Sandbox Code Playgroud)

评论:从文件读取图像到img,将数据复制到main,并按序列创建子图像似乎非常占用内存。我确信您所做的不仅仅是识别图像宽度,但是可以重写吗?Imagemagick 确实有一个ping方法(尚未在 中实现wand),它不会将图像数据读入内存。