微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决重新运行单元时,Spyder不会释放内存

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。