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))
我想我想出了发生了什么:
越来越多的数字确实来自objs
收藏本身。
当循环被调用第二次 (!( 时间时,上次迭代中的objs
对象仍在范围内。因此,GC 不会将其删除。因此,对象集合objs
现在还包含(较旧的(objs
对象本身,从而导致计数增加。
如果您在调用gc.get_objects()
/muppy.get_objects()
之前调用del objs
或objs = None
或其他任何内容,您将在每次迭代中获得相同的计数:
import gc
for i in range(10):
objs = None
objs = gc.get_objects()
print(len(objs))
提供每次迭代的7063
(在我的系统上(。