Paw*_*ech 5 python png image python-imaging-library
假设我有一项从网络获取图像并将其保存到目录的服务。我以 .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])
Run Code Online (Sandbox Code Playgroud)
对于某些图像(例如像这样的图像),这会生成以下输出:
12416
12416
22508
22508
22508
22508
Run Code Online (Sandbox Code Playgroud)
您可以看到使用的内存几乎增加了一倍!即使最后我删除了所有对象,内存仍然是开始时的两倍。
对于其他图像,例如这一张内存使用情况不会改变:
12416
12416
12416
12416
12416
12416
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会发生这种情况?有什么办法可以避免这种情况吗?
归档时间: |
|
查看次数: |
2023 次 |
最近记录: |