2012-07-07 52 views
0

在一個非常大的項目中,我正在尋找內存泄漏。在這裏我迄今取得的進展:Python(w/pyglet)內存泄漏

使用類櫃檯,

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

我看到,每個渲染程序的通我收穫類型的字典和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方法每幀相對於一次。

回答

0

我的問題是每次使用pyglet的push_handlers方法而不是一次。除去那個,內存泄漏消失了。