[英]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.