【发布时间】:2014-04-21 20:02:35
【问题描述】:
在一个 Python 代码中,该代码迭代了一系列涉及内存和 CPU 密集型数值计算的 30 个问题,我观察到 Python 进程的内存消耗随着 30 次迭代中的每一次迭代的开始而增长约 800MB,最后在第 8 次迭代中引发MemoryError(实际上系统内存已耗尽)。但是,如果我 import gc 并让 gc.collect() 在每次迭代后运行,则内存消耗保持在 ~2.5GB 不变,并且 Python 代码在解决所有 30 个问题后很好地终止。该代码只使用了连续2个问题的数据,没有引用循环(否则手动垃圾收集也无法降低内存消耗)。
问题
如果 Python 在引发 MemoryError 之前尝试运行垃圾收集器,此行为会引发问题。在我看来,这将是一件非常理智的事情,但也许有反对这样做的理由?
在此处进行了与上述类似的观察:https://stackoverflow.com/a/4319539/1219479
【问题讨论】:
-
上述问题及其答案通常涵盖垃圾收集。在这里,问题非常具体:垃圾收集器是否在
MemoryError引发之前调用?
标签: python memory numpy garbage-collection out-of-memory