Pympler表现得很奇怪

时间:2017-08-03 15:48:11

标签: python memory-leaks

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))

1 个答案:

答案 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