簡體   English   中英

Python逐行內存分析器?

[英]Python line-by-line memory profiler?

我希望從大型Python代碼庫中生成函數運行過程中堆使用或內存分配的摘要。

我熟悉heapy ,並且在我的代碼中的特定點獲取堆的“快照”對我很有幫助 ,但我發現很難用它生成“內存隨時間變化”的摘要。 我也玩過line_profiler ,但這適用於運行時,而不是內存。

我現在的后備是Valgrind with massif ,但是缺少Heapy和line_profiler提供的大量上下文Python信息。 是否存在后兩者的某種組合,可以在Python程序的執行范圍內提供內存使用感或堆增長感?

我會在程序啟動時使用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)

您可能對memory_profiler感興趣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM