0

Spyder 的内存管理最近让我发疯。我需要加载大型数据集(最大 10 GB)并对其进行预处理。稍后我执行一些计算/建模(使用 sklearn)并在它们上绘图。Spyder 的单元功能非常适合这一点,因为它允许我多次运行相同的计算(使用不同的参数),而无需重复耗时的预处理步骤。但是,由于各种原因,我在重复运行单元格时遇到了内存问题:

  • 多次重新运行同一个单元会增加内存消耗。我不明白这一点,因为我没有引入新变量,而以前的(全局)变量应该被覆盖。
  • 将变量封装在函数中会有所帮助,但不会达到预期的程度。我有一种强烈的感觉,局部变量的内存通常没有被正确释放(这在使用 .copy() 返回任何值以避免引用局部变量时也成立)。
  • 大型 matplotlib 对象无法正确回收。运行 gc.collect() 有时会有所帮助,但并不总是从图中清除所有已使用的内存。
  • 当使用 IPython 控制台中的“清除所有变量”按钮时,通常只有部分内存被释放,而几 GB 的内存可能仍被占用。
  • 从 IPython 控制台运行 %reset 效果更好,但并不总是完全清除内存(即使之后运行 import gc; gc.collect() )。
  • 唯一可以肯定的是重新启动内核。但是,我不喜欢这样做,因为它会删除控制台的所有输出。

对上述任何一点的建议,以及对 Spyder 内存管理的一些详细说明,都值得赞赏。我在我的代码中使用了多线程,并且怀疑某些问题与此有关,即使我无法查明问题。

4

0 回答 0