从调试器打印python中的所有可用元组

use*_*997 8 python memory-leaks

我意识到一个python脚本中存在内存泄漏.首先占用25MB左右,15天后占用超过500MB.

我遵循了许多不同的方式,并没有能够成为问题的根源,因为我是一个蟒蛇新手......

最后,我得到了以下内容

objgraph.show_most_common_types(limit=20)
tuple                      37674
function                   9156
dict                       3935
list                       1646
wrapper_descriptor         1468
weakref                    888
builtin_function_or_method 874
classobj                   684
method_descriptor          551
type                       533
instance                   483
Kind                       470
getset_descriptor          404
ImmNodeSet                 362
module                     342
IdentitySetMulti           333
PartRow                    331
member_descriptor          264
cell                       185
FontEntry                  170
Run Code Online (Sandbox Code Playgroud)

我设定了一个断点,在每次迭代之后,这就是正在发生的事情......

objgraph.show_growth()
tuple    37674       +10
Run Code Online (Sandbox Code Playgroud)

什么是最好的方法?

(Pdb) c
(Pdb) objgraph.show_growth()
tuple    37684       +10
Run Code Online (Sandbox Code Playgroud)

我想打印出所有的元组,并交叉检查 - 每次添加10个元组会给我一些线索吗?请告诉我如何做到这一点..

或者有没有其他方法来找出这个内存泄漏.我使用python 2.4.3,并且由于许多其他产品依赖 - 不幸的是我不能/不应该升级.

Ale*_*dev 2

我是否正确地理解为同一个脚本不间断地运行了 15 天?

对于此类长时间运行的进程,定期重新启动是一种很好的做法,并且比消除所有内存泄漏容易得多。

更新:看看这个答案,它似乎完全符合您的需要 - 打印所有新添加的未垃圾收集的对象。