python如何看執(zhí)行過程

對于一些剛?cè)腴T Python 的朋友來說,代碼稍微復(fù)雜些就難以搞懂代碼內(nèi)部到底是怎么運行的了,而且有時一運行就報錯,難以一下發(fā)現(xiàn)錯誤,只會用 Print 去慢慢找異常的地方,效率很低下。

所以對程序進行監(jiān)控和調(diào)試很重要。今天就給大家分享一個由國外大神制作的 Python 神工具,可以實時動態(tài)地監(jiān)控 Python 程序的運行情況,逐行追蹤代碼的運行時間,整個過程是可視化的,這就很贊了啊,能一清二楚地了解程序運行情況,有異常時也能快速找到,節(jié)省大量時間。

項目地址:https://github.com/alexmojaki/heartrate

Heartate——如監(jiān)測心率般追蹤程序運行

這個工具庫叫 Heartrate,可以實時可視化 Python 程序的執(zhí)行過程。監(jiān)控運行中的 Python 程序如圖:

如圖所示,左側(cè)數(shù)字表示每行代碼被觸發(fā)的次數(shù)。長方框表示最近被觸發(fā)的代碼行——方框越長表示觸發(fā)次數(shù)越多,顏色越淺表示最近被觸發(fā)次數(shù)越多。

雖然追蹤每行代碼的觸發(fā)次數(shù)是一個方法,但是要是能計算每次觸發(fā)代碼的執(zhí)行時間就好了。這樣能夠更好地說明哪行代碼是效率瓶頸。

得益于 executing (https://github.com/alexmojaki/executing) 庫,當前被執(zhí)行的調(diào)用以高亮顯示。

實時堆棧追蹤(stacktrace)如下所示:

功能

該工具可以:

????·啟動程序追蹤

????·在線程中啟動服務(wù)器

????·打開顯示 trace 被調(diào)用的文件可視化圖的瀏覽器窗口

在文件視圖中,堆棧追蹤位于底部。而在堆棧追蹤中,用戶可以點擊正在追蹤文件的堆棧條目,從而在該代碼行打開文件的可視化圖。

trace 只追蹤調(diào)用它的線程。若要追蹤多線程,用戶必須在每個線程都予以調(diào)用,并且每次的端口也不同。

如何設(shè)置需要監(jiān)測的程序

files 確定了除調(diào)用的 trace 之外其他需要追蹤的文件。files 必須是可調(diào)用的,并接受一個參數(shù):文件路徑,同時如果應(yīng)該追蹤該文件,則需要返回 True。為方便起見,這位開發(fā)者提供了以下函數(shù):

????·files.all:追蹤所有文件;

????·files.path_contains(substrings):追蹤路徑中包含任何給定子字符串的所有文件;

????·files.contains_regex(pattern):追蹤自身包含給定正則表達式(regex)的所有文件,所以用戶可以在源代碼中標記所追蹤的文件,如添加注釋。

默認情況下追蹤包含注釋 # heartrate 的文件(空格可選)。

如果用戶要追蹤多個文件,則可通過以下兩種方式得到它們的可視化頁面:

????·在堆棧追蹤中,用戶點擊正在追蹤的堆棧條目,則可以打開頁面并跳轉(zhuǎn)至堆棧條目;

????·跳轉(zhuǎn)至 http://localhost:9999/ 網(wǎng)站的索引頁,從而查看追蹤文件列表。

host:服務(wù)器的 HTTP host。若要運行可從任何地方訪問的遠程服務(wù)器,使用'0.0.0.0'。默認為'127.0.0.1'。

port:服務(wù)器的 HTTP 端口。默認為 9999。

browser:若為 True,則自動打開顯示文件(trace 被調(diào)用)可視化圖的瀏覽器標簽。默認為 False。

安裝

1pip?install--user?heartrate

支持 Python 3.5 以上版本。

其他代碼可視化工具

除了上面這個外,還有一個可以可視化代碼執(zhí)行過程的網(wǎng)站,名為Pythontutor。和本文的 Heartrate 不同,該網(wǎng)站更多的是可視化數(shù)據(jù)在程序中的變化過程。

可視化的過程如下:

用戶還可以在網(wǎng)站上編輯修改代碼,觀察運行過程中數(shù)據(jù)的變化。同時該網(wǎng)站還有 Java 等其他語言的版本。

網(wǎng)站地址:http://www.pythontutor.com (http://www.pythontutor.com/)

本文轉(zhuǎn)自:https://www.py.cn/jishu/jichu/15341.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • feisky云計算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 4,355評論 0 5
  • 腦子一陣鈍痛,周圍物品漸漸清晰。 “唔,我沒死”?夜傾汐警惕的觀察四周。四周擺放著古代電視劇才有的東西,破破爛...
    紀羽悠吖閱讀 305評論 0 1
  • 人的一生要經(jīng)歷很多的離別,離別除了要講究地點,更要講究時機。 和昔日的好友久未聯(lián)系,互相的圈子再也沒有重疊。彼此間...
    一只圓閱讀 483評論 0 0
  • 那天有人問我,什么是過客。我心里一驚,又有人要走了。 曾經(jīng)有人這樣跟我說過,后來就再也無音信。 我一直在想,希望我...
    呆木啊閱讀 262評論 0 0
  • 審判長道:"本庭就民事賠償部分進行調(diào)解,原被告雙方是否愿意接受調(diào)解?”趙母道:“再多的錢也換不回我兒子一條命,我不...
    馬到成功程雨煙閱讀 3,032評論 247 132

友情鏈接更多精彩內(nèi)容