重新运行单元时,Spyder不会释放内存

问题描述

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

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

对于以上任何方面的建议,以及对Spyder的内存管理的一些阐述,都深表感谢。我在代码中使用了多线程,并且怀疑某些问题与此相关,即使我无法查明问题所在。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)