Python 为什么PIL在打开某些png文件后不释放内存?

Python 为什么PIL在打开某些png文件后不释放内存?,python,image,png,python-imaging-library,Python,Image,Png,Python Imaging Library,假设我有一个服务,它从web上获取图像并将它们保存到目录中。我正在以.png文件的形式获取输入,并将其保存在本地。我使用PIL打开图像,并在需要时为它们添加背景。我最近注意到,在处理一些.png文件时,内存使用率很高。在打开一些.png文件时,PIL似乎没有正确地释放内存 以下代码将演示发生的情况: from PIL import Image import resource def check_mem(filename): mem = lambda:resource.getrusage

假设我有一个服务,它从web上获取图像并将它们保存到目录中。我正在以.png文件的形式获取输入,并将其保存在本地。我使用PIL打开图像,并在需要时为它们添加背景。我最近注意到,在处理一些.png文件时,内存使用率很高。在打开一些.png文件时,PIL似乎没有正确地释放内存

以下代码将演示发生的情况:

from PIL import Image
import resource

def check_mem(filename):
    mem = lambda:resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
    print mem()
    img = Image.open(filename)
    print mem()
    img = img.convert('RGBA')
    print mem()
    background = Image.new("RGBA", img.size, (255, 255, 255))
    print mem()
    image = background.paste(img, img)
    print mem()
    del background
    del img
    del image
    print mem()

if __name__ == "__main__":
    import sys
    check_mem(sys.argv[1])
对于某些图像(例如图像),这将生成以下输出:

12416
12416
22508
22508
22508
22508
你可以看到,使用的内存几乎翻了一倍!即使在最后,当我删除所有对象时,内存仍然是开始时的两倍

对于其他图像,内存使用情况不变:

12416
12416
12416
12416
12416
12416

有人知道为什么会这样吗?有什么办法可以避免吗?

你试过了吗?@Gil没有,我需要检查一下,我会试着报告发生了什么。不确定(这么说):你正在转换为RGBA。图像#1是RGB,由于
convert
返回一个副本,您正在覆盖
img
变量(来源:PIL,
Image.py
ln 633:“返回此图像的转换副本”)。我不确定这是否是问题所在,因为如果图像已经在正确的空间(您的img#2)中,它还应该返回一个副本。image.close()也不会释放内存。我得到相同的输出@Gil@Gil没有,我还没有找到解决办法。我将在pil repo中打开一个链接,也许pil的开发者会帮助我们