Viztracer是一種低空的日誌記錄/調試/分析工具,可以跟踪和可視化您的Python代碼執行。
前端UI由Perfetto提供動力。使用“ AWSD”縮放/導航。在“支持 - 控件”中可以找到更多幫助。
安裝VizTracer的首選方法是通過PIP
pip install viztracer
# Instead of "python3 my_script.py arg1 arg2"
viztracer my_script.py arg1 arg2
result.json
文件,您可以使用vizviewer
打開 # You can display all the files in a directory and open them in browser too
vizviewer ./
# For very large trace files, try external trace processor
vizviewer --use_external_processor result.json
Vizviewer將在http://localhost:9001
上託管HTTP服務器。您也可以打開瀏覽器並使用該地址。
如果您不希望Vizviewer自動打開WebBrowser,則可以使用
vizviewer --server_only result.json
如果您只需要一次提出跟踪報告,並且不需要持久服務器,請使用
vizviewer --once result.json
vizviewer result.json
可以使用VS代碼擴展名,以使您的生活更加輕鬆。
--open
在跟踪後立即打開報告viztracer --open my_script.py arg1 arg2
viztracer -o result.html --open my_script.py arg1 arg2
flask
) viztracer -m your_module
viztracer flask run
您也可以在腳本中手動啟動/停止Viztracer。
from viztracer import VizTracer
tracer = VizTracer ()
tracer . start ()
# Something happens here
tracer . stop ()
tracer . save () # also takes output_file as an optional argument
或者,您可以with
語句來做到這一點
with VizTracer ( output_file = "optional.json" ) as tracer :
# Something happens here
如果您使用的是Jupyter,則可以使用Viztracer Cell Magics。
# You need to load the extension first
% load_ext viztracer
% % viztracer
# Your code after
VizTracer Report
按鈕將出現在單元格之後,您可以單擊它查看結果
VizTracer可以使用--log_torch
記錄Pytorch(基於torch.profiler
)的本機調用和GPU事件。
with VizTracer ( log_torch = True ) as tracer :
# Your torch code
viztracer --log_torch your_model.py
VizTracer可以過濾您不想減少開銷的數據,並在轉儲日誌之前保留更長的時間段的信息。
Viztracer可以在不更改源代碼的情況下記錄額外信息
VizTracer在程序運行時支持插入自定義事件。這就像打印調試一樣,但是您可以知道在查看跟踪數據時何時發生此打印。
對於Python3.12+,Viztracer支持Python級的多線程跟踪,而無需對代碼進行任何修改。
對於3.12之前的版本,Viztracer支持Python本機threading
模塊。只需在創建線程之前啟動VizTracer
,它將起作用。
對於其他多線程場景,您可以使用enable_thread_tracing()
注意有關線程的VizTracer。
有關詳細信息,請參閱多線程文檔
Viztracer支持subprocess
, multiprocessing
, os.fork()
, concurrent.futures
和loky
of the Box。
對於更一般的多進程案例,Viztracer可以通過一些額外的步驟來支持。
有關詳細信息,請參閱多進程文檔
Viztracer本地支持asyncio
,但可以使用--log_async
來增強報告。
有關詳細信息,請參閱異步文檔
perfetto支持本機火焰圖,只需在UI上選擇切片,然後選擇“ slice flamegraph”。
Viztracer支持遠程附加到任意的Python過程以跟踪它,只要Viztracer可以導入
請參閱遠程附件文檔
Viztracer需要將內部數據轉儲為JSON格式。建議用戶安裝orjson
,這比內置json
庫快得多。如果不存在orjson
Viztracer將嘗試導入orjson
並歸還回到內置的json
庫。
Viztracer付出了很多努力來達到低空費用。實際的性能影響很大程度上取決於您的應用程序。對於典型的代碼庫,開銷預計將低於1倍。如果您的代碼有不常函數調用,則開銷可能很小。
Viztracer引入的高架基本上是在功能進入和退出期間的固定時間,因此在功能條目和退出上花費的時間越多,將觀察到更多的開銷。純遞歸fib
函數可能會在Python3.11+上遭受3x-4X的開銷(當優化Python調用時,在Python呼叫較慢之前,因此開銷比率較小)。
在現實生活中,您的代碼不應花費太多時間上的函數調用(它們實際上沒有做任何有用的事情),因此開銷會小得多。
許多技術都用於最大程度地減少代碼執行過程中的整體開銷,以減少Viztracer引入的不可避免的偏斜(報告保存部分並不重要)。例如,Viztracer試圖使用CPU時間戳計數器而不是SYSCALL來獲得可用的時間。在Python 3.12+上,Viztracer使用sys.monitoring
,其開銷少於sys.setprofile
。所有的努力使它比Python Stdlib Profiler的cProfile
明顯更快。
但是,Viztracer是一個示踪劑,這意味著它必須記錄每個功能輸入和退出,因此它不能像採樣偽造者那樣快 - 它們不是同一回事。有了額外的開銷,Viztracer提供的信息比普通的抽樣介紹者更多。
有關完整的文檔,請參閱https://viztracer.readthedocs.io/en/stable
請通過GitHub Disears Tracker發送錯誤報告和功能請求。 Viztracer目前正在開發中,並且對任何建設性建議開放。
版權2020-2024 Tian Gao。
根據Apache 2.0許可證的條款分發。