我有一个运行一系列实验的 Python 程序,没有打算将数据从一个测试存储到另一个测试。我的代码包含我完全找不到的内存泄漏(我已经查看了有关内存泄漏的其他线程。由于时间限制,我不得不放弃寻找泄漏,但如果我能够隔离每个实验,该程序可能会运行足够长的时间来产生我需要的结果。
具体情况详解
更新
Gnibbler 的回答实际上让我发现存储每次计算期间使用的所有数据的 ClosenessCalculation 对象并没有被杀死。然后我用它来手动删除一些似乎已经解决了内存问题的链接。
您可以使用类似的东西来帮助追踪内存泄漏
>>> from collections import defaultdict >>> from gc import get_objects >>> before = defaultdict(int) >>> after = defaultdict(int) >>> for i in get_objects(): ... before[type(i)] += 1 ...
现在假设测试泄漏了一些内存
>>> leaked_things = [[x] for x in range(10)] >>> for i in get_objects(): ... after[type(i)] += 1 ... >>> print [(k, after[k] - before[k]) for k in after if after[k] - before[k]] [(<type 'list'>, 11)]
11 因为我们泄露了一个包含 10 个列表的列表