Я бы использовал sys.settrace
при запуске программы для регистрации пользовательской функции трассировки.Функция custom_trace_function будет вызываться для каждой строки кода.Затем вы можете использовать эту функцию для хранения информации, собранной heapy или meliae , в файле для последующей обработки.
Вот очень простой пример, который каждую секунду записывает вывод hpy.heap () в простой текстовый файл:
import sys
import time
import atexit
from guppy import hpy
_last_log_time = time.time()
_logfile = open('logfile.txt', 'w')
def heapy_profile(frame, event, arg):
currtime = time.time()
if currtime - _last_log_time < 1:
return
_last_log_time = currtime
code = frame.f_code
filename = code.co_filename
lineno = code.co_firstlineno
idset = hpy().heap()
logfile.write('%s %s:%s\n%s\n\n' % (currtime, filename, lineno, idset))
logfile.flush()
atexit.register(_logfile.close)
sys.settrace(heapy_profile)