如何在Python中列出所有实例化对象?

时间:2013-11-18 22:24:06

标签: python

我有一个长时间运行的进程,可能会有资源泄漏。如何在我的环境中获取所有实例化对象(可能只有特定类)的列表?

3 个答案:

答案 0 :(得分:7)

尝试gc.get_objects()

>>> import gc
>>> 
>>> class Foo: pass
... 
>>> f1 = Foo()
>>> 
>>> [o for o in gc.get_objects() if isinstance(o, Foo)]
[<__main__.Foo instance at 0x2d2288>]
>>> 
>>> f2 = Foo()
>>> 
>>> [o for o in gc.get_objects() if isinstance(o, Foo)]
[<__main__.Foo instance at 0x2d2288>, <__main__.Foo instance at 0x2d22b0>]

答案 1 :(得分:3)

你必须要结合几种方法。我过去曾使用过这个模块来检查内存泄漏

https://mg.pov.lt/objgraph/

它可以让你的进程使用TON更多内存,但速度相当慢,具体取决于你如何使用它。

答案 2 :(得分:-1)

所有实例化对象(我假设只在单个模块中使用Python本身):

globals().keys()

对于所有这些只是特定类的实例:

filter(lambda x: isinstance(x, some_class), globals().keys())