Утечка памяти Schrodinger - при hpy утечка инициализации исчезает - PullRequest
0 голосов
/ 17 мая 2019

Я заметил, что в моем коде на python есть утечка памяти, и он находился в процессе отладки.Я импортировал hpy из гуппи и инициализировал его (h = hpy ()), утечка исчезла.Как только эта инициализация закомментирована, утечка возвращается.Есть ли что-то, что происходит во время инициализации hpy, что может привести к этому?Насколько я понимаю, это должен быть только монитор кучи, поэтому, если он не вызывает сборщик мусора или что-то в этом роде, он не должен "исправлять" мою проблему.

Я сосредоточился в основном на изоляции утечки памяти в моем коде, который я чувствую, исходит из внешней библиотеки, которую я импортирую.В основном это скомпилированное программное обеспечение под названием LAMMP с настройкой общих библиотек Python.Я попытался удалить объекты, вручную вызвать сборщик мусора python и т. Д. Я обнаружил, что гуппи можно использовать, чтобы помочь изолировать утечку памяти, и поэтому собирался использовать его;однако заметил, что, как только я импортирую и инициализирую гуппи, утечка исчезла (что фактически затрудняет отладку ...).

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
...