1. 程式人生 > 其它 >這款神器,能把Python程式碼執行過程看地一清二楚

這款神器,能把Python程式碼執行過程看地一清二楚

對於一些剛入門 Python 的朋友來說,程式碼稍微複雜些就難以搞懂程式碼內部到底是怎麼執行的了,而且有時一執行就報錯,難以一下發現錯誤,只會用 Print 去慢慢找異常的地方,效率很低下。

所以對程式進行監控和除錯很重要。今天就給大家分享一個由國外大神製作的 Python 神工具,可以實時動態地監控 Python 程式的執行情況,逐行追蹤程式碼的執行時間,整個過程是視覺化的,這就很讚了啊,能一清二楚地瞭解程式執行情況,有異常時也能快速找到,節省大量時間。

專案地址:https://github.com/alexmojaki/heartrate

Heartate——如監測心率般追蹤程式執行

這個工具庫叫 Heartrate ,可以實時視覺化 Python 程式的執行過程。監控執行中的 Python 程式如圖:

如圖所示,左側數字表示每行程式碼被觸發的次數。長方框表示最近被觸發的程式碼行——方框越長表示觸發次數越多,顏色越淺表示最近被觸發次數越多。

雖然追蹤每行程式碼的觸發次數是一個方法,但是要是能計算每次觸發程式碼的執行時間就好了。這樣能夠更好地說明哪行程式碼是效率瓶頸。by 思得益於 executing (https://github.com/alexmojaki/executing) 庫,當前被執行的呼叫以高亮顯示。

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

該工具可以:

  • 啟動程式追蹤
  • 線上程中啟動伺服器
  • 開啟顯示 trace() 被呼叫的檔案視覺化圖的瀏覽器視窗

在檔案檢視中,堆疊追蹤位於底部。而在堆疊追蹤中,使用者可以點選正在追蹤檔案的堆疊條目,從而在該程式碼行開啟檔案的視覺化圖。

trace 只追蹤呼叫它的執行緒。若要追蹤多執行緒,使用者必須在每個執行緒都予以呼叫,並且每次的埠也不同。

如何設定需要監測的程式

files 確定了除呼叫的 trace 之外其他需要追蹤的檔案。files 必須是可呼叫的,並接受一個引數:檔案路徑,同時如果應該追蹤該檔案,則需要返回 True。為方便起見,這位開發者提供了以下函式:

  • files.all:追蹤所有檔案;
  • files.path_contains(substrings):追蹤路徑中包含任何給定子字串的所有檔案;
  • files.contains_regex(pattern):追蹤自身包含給定正則表示式(regex)的所有檔案,所以使用者可以在原始碼中標記所追蹤的檔案,如添加註釋。

預設情況下追蹤包含註釋 # heartrate 的檔案(空格可選)。

如果使用者要追蹤多個檔案,則可通過以下兩種方式得到它們的視覺化頁面:

  • 在堆疊追蹤中,使用者點選正在追蹤的堆疊條目,則可以開啟頁面並跳轉至堆疊條目;
  • 跳轉至 http://localhost:9999/ 網站的索引頁,從而檢視追蹤檔案列表。

host:伺服器的 HTTP host。若要執行可從任何地方訪問的遠端伺服器,使用'0.0.0.0'。預設為'127.0.0.1'。
port:伺服器的 HTTP 埠。預設為 9999。
browser:若為 True,則自動開啟顯示檔案(trace 被呼叫)視覺化圖的瀏覽器標籤。預設為 False。

安裝

pip install --user heartrate

支援 Python 3.5 以上版本。

其他程式碼視覺化工具

除了上面這個外,還有一個可以視覺化程式碼執行過程的網站,名為 Pythontutor。和本文的 Heartrate 不同,該網站更多的是視覺化資料在程式中的變化過程。

視覺化的過程如下:

使用者還可以在網站上編輯修改程式碼,觀察執行過程中資料的變化。同時該網站還有 Java 等其他語言的版本。

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

參考連結:https://github.com/alexmojaki/heartrate

逆鋒起筆是一個專注於程式設計師的程式設計圈子,以分享javaPython學習資源 為主,關注即可領取 23 種精選的程式設計視訊教程和大佬們推薦的電子版學習資料!