Python linebyline内存分析器?

2024-05-28 19:22:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望从一个大的Python代码库生成一个函数运行过程中堆使用率或内存分配的摘要。在

我对heapy很熟悉,在我的代码中对堆的特定点进行“快照”非常有用,但是我发现很难用它生成“内存随时间变化”的摘要。我也使用过line_profiler,但这是在运行时工作的,而不是内存。在

我现在的备用方法是使用massif的Valgrind,但是它缺少Heapy和line_profiler提供的大量上下文Python信息。在Python程序的执行过程中,是否存在后两者的某种组合,以提供内存使用或堆增长的感觉?在


Tags: 方法函数内存代码信息过程line时间
2条回答

我会在程序启动时使用^{}注册一个自定义跟踪函数。将为每一行代码调用自定义的\u trace_函数。然后您可以使用该函数将heapy或meliae收集的信息存储在一个文件中,以便以后处理。在

下面是一个非常简单的示例,它记录hpy.堆()每秒转换为纯文本文件:

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)

您可能会对memory_profiler感兴趣。在

相关问题 更多 >

    热门问题