Python(w / pyglet)内存泄漏

时间:2012-07-07 21:01:05

标签: python memory memory-leaks pyglet

在一个非常大的项目中,我正在寻找内存泄漏。到目前为止我的进展如下:

使用班级计数器,

import gc
from collections import Counter
def count():
      return Counter(type(o).__name__ for o in gc.get_objects())

我看到对于程序的每个渲染过程,我获得了dicts和instancemethods:

Counter({'instancemethod': 9714, 'dict': 7274, ...
Counter({'instancemethod': 9716, 'dict': 7275, ...
Counter({'instancemethod': 9718, 'dict': 7276, ...
Counter({'instancemethod': 9720, 'dict': 7277, ...

然后我尝试识别没有收集垃圾的额外字典,用这个:

def get_latest():
    for e in gc.get_objects():
        if type(e).__name__ == "dict":
            latest = e
    return latest

不幸的是,返回的大部分都是相同的(dict1是dict2),所以它不是列表中的最后一个。

有关如何找到泄漏的任何指示将不胜感激。 使用python 2.7和前沿pyglet。

此外,这只会影响游戏的客户端,而不会影响服务器。所以这可能是pyglet中的问题 - 即便如此我想找到它。

编辑:这个问题由我自己解答,我的问题是每帧使用pyglet的push_handlers方法而不是一次。

1 个答案:

答案 0 :(得分:0)

我的问题是每帧使用pyglet的push_handlers方法而不是一次。删除它,内存泄漏消失了。