我在使用gc.get_referrers
的python程序中发现了可能的内存泄漏,但是我找不到哪个对象拥有该对象:
class Foo:
def __init__(self, i, j):
self.i = i
self.j = j
def do_stuff(obj):
# do stuff with obj
objs = gc.get_objects()
ls = [obj for obj in objs if isinstance(obj, Foo)]
foo = ls[0]
refs = gc.get_referrers(foo)
l = None
for ref in refs:
if type(ref) == list:
if len(ref) > 1000:
l = ref
objgraph.show_backrefs([gc.get_referrers(l)[0]], filename='sample-backref-graph.png')
这只是给我一个这样的图形:
Foo object <--- list of 100k foo object <--- list of lists
试图递归地找到它,但是我找不到任何不是列表的东西。那么,有没有办法找出哪个函数写入了此列表,或者至少找到了创建该函数的那一行?