Python 使用数据帧的内存泄漏

Python 使用数据帧的内存泄漏,python,pandas,memory-leaks,memory-leak-detector,objgraph,Python,Pandas,Memory Leaks,Memory Leak Detector,Objgraph,我在多线程代码中使用了pandas.DataFrame(实际上是DataFrame的一个自定义子类,名为Sound)。我注意到我有一个内存泄漏,因为我的程序的内存使用量逐渐增加到超过10mn,最终达到我计算机内存的100%并崩溃 我曾经尝试跟踪此泄漏,发现MyDataFrame的实例数一直在增加,而它本不应该这样做:其run方法中的每个线程都创建一个实例,进行一些计算,将结果保存在文件中并退出。。。因此,不应保留任何参考资料 使用objgraph我发现内存中的所有数据帧都有一个类似的参考图:

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

我曾经尝试跟踪此泄漏,发现
MyDataFrame
的实例数一直在增加,而它本不应该这样做:其
run
方法中的每个线程都创建一个实例,进行一些计算,将结果保存在文件中并退出。。。因此,不应保留任何参考资料

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


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

证实索引基础结构中存在某种内存泄漏。这不是由上面的参考图引起的。让我们将讨论转移到GitHub(问答也是如此):


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

是否可以包含一个简短的代码段来复制此内容?是否尝试手动运行垃圾收集器?如果您有循环引用,这可能需要释放内存<代码>导入gc;gc.collect()Ok。。。使用gc手动收集似乎确实做到了这一点。当我确信这一点时,我将予以确认。是否有什么原因导致Gen2 gc没有通过Python运行时自动运行?