0

我注意到我的 python 代码有内存泄漏,并且正在调试它。我从 guppy 导入 hpy 并初始化它(h = hpy()),泄漏消失了。一旦该初始化被注释掉,泄漏就会返回。在 hpy 初始化期间是否发生了可能导致这种情况的事情?据我了解,它应该只是一个堆监视器,所以除非它调用垃圾收集器或其他东西,否则它不应该“解决”我的问题。

我主要专注于隔离代码中的内存泄漏,我觉得它来自我正在导入的外部库。主要是一个名为 LAMMPs 的编译软件,带有 Python 共享库设置。我尝试删除对象,手动调用python垃圾收集器等。我发现guppy可以用来帮助隔离内存泄漏,因此正要尝试使用它;但是,注意到一旦我导入并初始化 guppy,泄漏就消失了(实际上使现在更难调试......)。

memory_monitor_code.py

import os
import time


for i in range(10000):
    os.system("free -m | head -n 2 | tail -n 1 | awk '{print $3}' >> mem.log")
time.sleep(2)

泄漏代码.py

from guppy import hpy

# CODE AND STUFFS

def objective():

    # With the addition of this, memory leak is effectively removed.
    h = hpy()

    # CODE AND STUFFS
4

0 回答 0