Pympler用于在python中查找内存泄漏但是当我运行此程序时:
from pympler import muppy
for i in range(10):
objs = muppy.get_objects()
print(len(objs))
输出是:
31703
31704
31705
31706
31707
31708
31709
31710
31711
31712
在每次迭代中,对象的数量都增加了!如果我运行了很长时间,我的内存就会耗尽!怎么了? pympler本身是否有内存泄漏?!
更新 以下程序也会发生同样的事情:
import gc
for i in range(10):
objs = gc.get_objects()
print(len(objs))
答案 0 :(得分:0)
我想我弄清楚发生了什么:
越来越多的数字确实来自objs
集合本身。
当循环被调用第二个(!)时,上一次迭代的objs
对象仍在范围内。因此,GC不会将其删除。因此,对象objs
的集合现在还包含(较旧的)objs
对象本身,导致计数递增。
如果您在调用del objs
/ objs = None
之前致电gc.get_objects()
或muppy.get_objects()
或其他任何,您将在每次迭代时获得相同的计数:
import gc
for i in range(10):
objs = None
objs = gc.get_objects()
print(len(objs))
在每次迭代时(在我的系统上)给出7063
。