【发布时间】:2018-02-26 22:43:46
【问题描述】:
我正在编写一段复杂的 python 代码,它在垃圾收集中花费了大约 40% 的执行时间。
ncalls tottime percall cumtime percall filename:lineno(function)
**6028 494.097 0.082 494.097 0.082** {built-in method gc.collect}
1900 205.709 0.108 205.709 0.108 {built-in method time.sleep}
778 26.858 0.035 383.476 0.493 func1.py:51(fill_trades)
有没有办法减少对 gc.collect 的调用次数?我尝试了 gc.disable(),但它的有效性是有限的,因为 Cpython 主要使用引用计数。我正在使用python 3.6。
【问题讨论】:
-
你能发布一些代码吗?很难说为什么您的代码会如此频繁地触发垃圾收集而没有看到它,或者一个与您的真实代码足够相似的可重现示例。
-
我没有手动调用 gc.collect。这是 pstats 的输出。代码太大,不能在这里发布。代码严重依赖对象。
-
如果有人能够在没有看到您的任何代码的情况下回答这个问题,我会感到惊讶。带有minimal reproducible example 的问题更有可能得到答案。尤其是像这样复杂的东西。
-
“严重依赖对象”。这就是垃圾收集器如此努力工作的原因
标签: python pandas garbage-collection performance-testing