gpt4 book ai didi

Python - 解决内存泄漏问题

转载 作者:IT老高 更新时间:2023-10-28 22:02:23 27 4
gpt4 key购买 nike

我有一个 Python 程序,它运行一系列实验,没有打算将数据从一个测试存储到另一个测试。我的代码包含一个我完全找不到的内存泄漏(我查看了关于内存泄漏的 other threads)。由于时间限制,我不得不放弃寻找泄漏点,但如果我能够隔离每个实验,该程序可能会运行足够长的时间来产生我需要的结果。

  • 在单独的线程中运行每个测试会有帮助吗?
  • 还有其他方法可以隔离泄漏的影响吗?

具体情况详解

  • 我的代码有两部分:实验运行器和实际实验代码。
  • 虽然运行所有实验的代码和每个实验使用的代码之间没有共享全局变量,但某些类/函数是必须共享的。
  • 实验运行器不仅仅是一个可以轻松放入 shell 脚本的简单 for 循环。它首先根据配置参数决定需要运行的测试,然后运行测试,然后以特定方式输出数据。
  • 我尝试手动调用垃圾收集器,以防问题仅仅是没有运行垃圾收集,但这不起作用

更新

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 个列表

关于Python - 解决内存泄漏问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1641231/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com