Python 我可以使用gc.collect()吗?

Python 我可以使用gc.collect()吗?,python,python-2.7,memory-leaks,garbage-collection,Python,Python 2.7,Memory Leaks,Garbage Collection,TLDR:在我的脚本中添加gc.collect()已修复内存泄漏。这是怎么发生的 长版本:在更改数据库更新方式后,我的Flask服务器出现内存泄漏。在更改之前,服务器进程的常驻集大小为28kB。应用更改后,它将在两天内增长到250MB 我已经对堆做了一些测试,但是我没有得到任何悬而未决的引用可能在哪里的线索。因此,我只是在数据库提交(每15秒发生一次)之后添加了一个gc.collect() 这不知何故神秘地解决了它,因为它已经运行了一个小时,并且它保持在29.5kb以下(在修复之前,它现在会更

TLDR:在我的脚本中添加
gc.collect()
已修复内存泄漏。这是怎么发生的


长版本:在更改数据库更新方式后,我的Flask服务器出现内存泄漏。在更改之前,服务器进程的常驻集大小为28kB。应用更改后,它将在两天内增长到250MB

我已经对堆做了一些测试,但是我没有得到任何悬而未决的引用可能在哪里的线索。因此,我只是在数据库提交(每15秒发生一次)之后添加了一个
gc.collect()


这不知何故神秘地解决了它,因为它已经运行了一个小时,并且它保持在29.5kb以下(在修复之前,它现在会更高)。我不确定为什么这个改变会解决这个问题,因为Python有自动GC,而我只是强制执行一个即时GC。使用
gc.collect()
是否是修复漏洞的可行解决方案(例如,没有副作用)?

我可以假设您的代码中不包含
gc.disable()
?代码中没有其他与
gc
相关的调用。
gc.collect()
没有逻辑副作用,但它可能“缓慢”。这可能是一个明显的响应时间峰值(比如1000的1个请求慢了NNms),这取决于活动对象的数量。好的,这不会是一个问题。但是,如果有一个自动GC,为什么它能解决泄漏问题呢?我无法回答
gc.collect()
(在第2代中默认情况下)已经由Python在每个NNNN分配中运行。没有明显的理由显式调用“修复”代码。如果您想进一步调试,可以使用一些实用的方法。