gpt4 book ai didi

python - 强制丢弃 Python Imaging Library 图像以回收内存

转载 作者:太空宇宙 更新时间:2023-11-03 11:09:38 24 4
gpt4 key购买 nike

我有一个程序可以加载和处理大量这种形式的图像:

for fn in filenames:
im = Image.open(fn)
get_some_basic_stats(im)

当在许多图像上运行时,Python 进程最终会使用大量内存——远远超过任何一张图像应占的内存。不用说,这最终会导致页面文件崩溃。

我假设(虽然我不是 100% 肯定,显然)这是因为以前的图像在被垃圾收集之前一直在占用内存。

有没有办法强制丢弃它们?我无法在 PIL reference 中找到一个.我想过使用 del im,但我知道这只会从本地范围中删除名称“im”,实际上与在循环顶部重新分配它相同。

最佳答案

python 中的任何内容都不能显式销毁。在 CPython 中,所有内容都是引用计数的,因此一旦没有引用它就应该将其释放。在您的情况下,应该在循环的下一次迭代中发生。您可以通过运行 gc.collect() 强制循环垃圾收集器,但我怀疑这能否解决这里的问题。

你可以试试:在循环结束时打印 sys.getrefcount(im)。它会告诉您有多少对象引用了图像。它应该是 2(一个用于局部变量,一个用于 im 作为 getrefcount 的参数)。如果它更大,那么就可以解释为什么对象没有被释放。

您还可以查看 gc.getobjects(),它将返回 python 系统中所有对象的列表。我会写一个快速循环来计算不同类型的对象并打印它们。查看计数是否有任何变化。

关于python - 强制丢弃 Python Imaging Library 图像以回收内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8665199/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com