Python 应用程序泄漏内存,但 Valgrind 拒绝

Python application leaking memory, but Valgrind says no

我有一个长 运行ning Python 的应用程序,它每隔几分钟循环扫描数兆字节的文件。在一天的过程中,我看到它吞噬了 gigybates 的内存,最后我不得不杀死并重新启动它。当然,我怀疑是我自己构建的 C 扩展。

当我 运行 应用程序在 valgrind 下时,它没有显示泄漏(除了 "possibly lost" 中的一些大数字,但是 "naked" Python 解释器确实那也是)。

我已经下载并编译了 Python-3.6.8 的调试版本,并将其安装在 virtualenv 中,但我无法弄清楚如何 运行 setup.py 在启用调试的我的扩展上,更不用说如何安装我需要的所有其他软件包 运行 完整的应用程序。

事实证明,过度引用的 PyObjects 最终属于 Valgrind 的 "Possibly lost" 类别,而不是 "definitely lost"。但是即使 运行 单独 Python 解释器在 "possibly lost," 中也有很多东西所以我花了一段时间才弄清楚我的代码泄漏内存的位置(在开发过程中调用PyList_SetItem() 已变形为 PyList_Append(),这不会窃取项目的引用)。