皮普勒表现得很奇怪



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 objsobjs = None或其他任何内容,您将在每次迭代中获得相同的计数:

import gc
for i in range(10):
objs = None
objs = gc.get_objects()
print(len(objs))

提供每次迭代的7063(在我的系统上(。

最新更新