假设我有一项服务,可以从网络上获取图像,并将它们保存到目录中。我正在输入.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])
对于某些图像(例如图像like this one),会生成以下输出:
12416
12416
22508
22508
22508
22508
你可以看到使用的内存几乎翻了一倍!即使在最后删除所有对象时,内存仍然是开头时的两倍。
对于其他图片,example this one内存使用情况不会改变:
12416
12416
12416
12416
12416
12416
有谁知道为什么会这样?有什么方法可以避免这种情况吗?