我注意到我的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)
leaky_code.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