代码之家  ›  专栏  ›  技术社区  ›  yeerk

在Python中跟踪特定对象的引用(内存泄漏)

  •  0
  • yeerk  · 技术社区  · 1 年前

    我有一个第三方库,造成了巨大的内存泄漏。我打过电话 gc.collect ,并且没有引用此库创建的任何对象,但它仍然泄漏。

    使用 gc.get_objects() 我已经确定了许多不应该存在的对象,因为它们是这个库特有的。

    我如何跟踪哪些对象使这些泄漏的对象保持活动状态(目标是将其跟踪到全局变量/列表,我可以重置该变量/列表以修复泄漏)?

    文件和行号会很好,但即使有holder对象的实例也会有很大帮助。

    1 回复  |  直到 1 年前
        1
  •  1
  •   Kelly Bundy    1 年前

    你可以试试 gc.get_referrers .演示:

    import gc
    
    def test():
        a = ['foo', b := {'bar'}]
        for r in gc.get_referrers(b):
            print(r)
    
    test()
    

    输出( Attempt This Online! ):

    ['foo', {'bar'}]