cprofile:基於lsprof的用c語言實現的擴充套件應用,執行開銷比較合理,適合分析執行時間較長的程式,推薦使用這個模組;
profile:純python實現的效能分析模組,介面和cprofile一致。但在分析程式時增加了很大的執行開銷。不過,如果你想擴充套件profiler的功能,可以通過繼承這個模組實現;
使用cprofile進行效能分析,你可以在python指令碼中實現,也可以使用命令列執行:
import cprofile
# 直接把分析結果列印到控制台
cprofile.run("test()")
# 把分析結果儲存到檔案中
cprofile.run("test()", filename="result.out")
# 增加排序方式
cprofile.run("test()", filename="result.out", sort="cumulative")
使用命令列執行的方法基本一致,bash**如下:
# 直接把分析結果列印到控制台
python -m cprofile test.py
# 把分析結果儲存到檔案中
python -m cprofile -o result.out test.py
# 增加排序方式
python -m cprofile -o result.out -s cumulative test.py
使用cprofile分析的結果可以輸出到指定的檔案中,但是檔案內容是以二進位制的方式儲存的,用文字編輯器開啟時亂碼。所以,python提供了乙個pstats模組,用來分析cprofile輸出的檔案內容。
import pstats
# 建立stats物件
p = pstats.stats("result.out")
# strip_dirs(): 去掉無關的路徑資訊
# sort_stats(): 排序,支援的方式和上述的一致
# print_stats(): 列印分析結果,可以指定列印前幾行
# 和直接執行cprofile.run("test()")的結果是一樣的
p.strip_dirs().sort_stats(-1).print_stats()
# 按照函式名排序,只列印前3行函式的資訊, 引數還可為小數,表示前百分之幾的函式資訊
p.strip_dirs().sort_stats("name").print_stats(3)
# 按照執行時間和函式名進行排序
p.strip_dirs().sort_stats("cumulative", "name").print_stats(0.5)
# 如果想知道有哪些函式呼叫了sum_num
p.print_callers(0.5, "sum_num")
# 檢視test()函式中呼叫了哪些函式
p.print_callees("test")
結果類似:
8
function calls in 0.042 seconds
ordered by: cumulative time
ncalls
tottime percall cumtime percall filename:lineno(function)
10.000
0.000
0.042
0.042
test.py:5
()10.002
0.002
0.042
0.042
test.py:12
(test)
20.035
0.018
0.039
0.020
test.py:5
(sum_num)
30.004
0.001
0.004
0.001
10.000
0.000
0.000
0.000
其中,輸出每列的具體解釋如下:
ncalls:表示函式呼叫的次數;
tottime:表示指定函式的總的執行時間,除掉函式中呼叫子函式的執行時間;
percall:(第乙個percall)等於 tottime/ncalls;
cumtime:表示該函式及其所有子函式的呼叫執行的時間,即函式開始呼叫到返回的時間;
percall:(第二個percall)即函式執行一次的平均時間,等於 cumtime/ncalls;
filename:lineno(function):每個函式呼叫的具體資訊;
另外,上面分析的時候,排序方式使用的是函式呼叫時間(cumulative),除了這個還有一些其他允許的排序方式:calls, cumulative, file, line, module, name, nfl, pcalls, stdname, time等。
對於一些比較大的應用程式,如果能夠將效能分析的結果以圖形的方式呈現,將會非常實用和直觀,常見的視覺化工具有gprof2dot,visualpytune,kcachegrind等,這裡介紹一下gprof2dot的用法。
使用之前,你需要安裝graphviz:
sudo apt-get install graphviz
python gprof2dot.py -f pstats result.out | dot -tpng -o result.png
結果如下:
參考文獻:
python 效能分析入門指南
檢測python程式執行效率及記憶體和cpu使用的7種方法
python **效能優化技巧
關於python profilers效能分析器
the python profilers
高效程式設計之 cProfile 效能分析
寫 經常會聽說一些名詞,比如 效能分析 調優。cprofile 是 python 調優的一種工具,它能夠統計在整個 執行過程中,每個函式呼叫的次數和消耗的時間。這個工具雖然很常用,但是沒必要花太多時間研究這個工具,簡單使用就能達到效果,所以我這裡只簡單記錄下核心用法。兩種使用方式 cprofile....
python金融分析 用於金融分析的Python包
recommended by activestate.1.numpy 實現各種陣列物件函式和傅利葉變換等等科學計算模組。3.matplotlib 乙個跨平台的數值繪圖包,可繪製高質量的2d,3d影象。4.mysql for python python操作mysql資料庫的介面軟體包。5.pyqt 乙...
使用virtualenv建立獨立的Python環境
virtualenv是 python的沙盒環境,主要解決以下問題 yum groupinstall development tools yum y install zlib devel bzip2 devel openssl devel ncurses devel sqlite devel read...