【问题标题】:Memory leak using pandas dataframe使用熊猫数据框的内存泄漏
【发布时间】:2012-12-22 20:12:35
【问题描述】:

我在多线程代码中使用pandas.DataFrame(实际上是DataFrame 的自定义子类,称为Sound)。我注意到我有内存泄漏,因为我的程序的内存使用量逐渐增加超过 1000 万,最终达到我的计算机内存的 ~100% 并崩溃。

我使用objgraph 尝试跟踪此泄漏,并发现MyDataFrame 的实例计数一直在增加,而它不应该:run 方法中的每个线程都会创建一个实例,进行一些计算,将结果保存在文件中并退出......因此不应保留任何引用。

使用objgraph发现内存中的所有数据帧都有一个相似的参考图:

我不知道这是否正常......看起来这就是将我的对象保存在内存中的原因。有什么想法、建议、见解吗?

【问题讨论】:

  • 是否可以包含一个短代码 sn-p 来复制它?
  • 您是否尝试手动运行垃圾收集器?如果你有循环引用,这可能需要释放内存。 import gc; gc.collect()

标签: python pandas memory-leaks memory-leak-detector objgraph


【解决方案1】:

确认索引基础架构中存在某种内存泄漏。 不是由上面的参考图引起的。让我们将讨论移至 GitHub(SO 用于 Q&A):

https://github.com/pydata/pandas/issues/2659

编辑:这实际上似乎根本不是内存泄漏,但可能与操作系统内存分配问题有关。请查看 github issue 以获取更多信息

【讨论】:

  • 好吧...用 gc 手动收集似乎确实可以解决问题。当我确定时,我会确认。
  • 第 2 代 gc 没有被 Python 运行时自动运行是否有原因?
猜你喜欢
  • 2015-05-08
  • 1970-01-01
  • 2017-06-14
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
  • 2015-02-02
  • 2016-12-30
相关资源
最近更新 更多