**優化的前提是需要了解效能瓶頸在什麼地方,程式執行的主要時間是消耗在**,對於比較複雜的**可以借助一些工具來定位,python 內建了豐富的效能分析工具,如 profile,cprofile 與 hotshot 等。其中 profiler 是 python 自帶的一組程式,能夠描述程式執行時候的效能,並提供各種統計幫助使用者定位程式的效能瓶頸。python 標準模組提供三種 profilers:cprofile,profile 以及 hotshot。profile 的使用非常簡單,只需要在使用之前進行
import 即可,也可以在命令列中使用。
測試示例:
importprofile
defa():
sum =0
for i in range(1, 10001):
sum +=i
return
sumdef
b():
sum =0
for i in range(1, 100):
sum +=a()
return
sumif
__name__ == "
__main__":
profile.run(
"b()
")
輸出結果:
104 function calls in 0.094 seconds
ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.094 0.094 :0(exec)
1 0.000 0.000 0.000 0.000 :0(setprofile)
1 0.000 0.000 0.094 0.094 :1()
1 0.000 0.000 0.094 0.094 profile:0(b())
0 0.000 0.000 profile:0(profiler)
99 0.094 0.001 0.094 0.001 test.py:15(a)
1 0.000 0.000 0.094 0.094 test.py:21(b)
其中輸出每列的具體解釋如下:●ncalls:表示函式呼叫的次數;
●tottime:表示指定函式的總的執行時間,除掉函式中呼叫子函式的執行時間;
●percall:(第乙個 percall)等於 tottime/ncalls;
●cumtime:表示該函式及其所有子函式的呼叫執行的時間,即函式開始呼叫到返回的時間;
●percall:(第二個 percall)即函式執行一次的平均時間,等於 cumtime/ncalls;
●filename:lineno(function):每個函式呼叫的具體資訊;
如果需要將輸出以日誌的形式儲存,只需要在呼叫的時候加入另外乙個引數。如 profile.run(「profiletest()」,」testprof」)。
如果我們不想在程式中呼叫profile庫使用,可以在命令列使用命令。
importosdef
a():
sum =0
for i in range(1, 10001):
sum +=i
return
sumdef
b():
sum =0
for i in range(1, 100):
sum +=a()
return
sumprint b()
執行命令檢視效能分析結果
python -m cprofile test.py
將效能分析結果儲存到result檔案
python -m cprofile -o result test.py
使用pstats來格式化顯示結果
python -c "import pstats; p=pstats.stats('reslut); p.print_stats()"
python -c "import pstats; p=pstats.stats('result'); p.sort_stats('time').print_stats()
sort_stats支援一下引數:calls, cumulative, file, line, module, name, nfl, pcalls, stdname, time
測試示例:在**中直接使用profile與stats
importosdef
a():
sum =0
for i in range(1, 10001):
sum +=i
return
sumdef
b():
sum =0
for i in range(1, 100):
sum +=a()
return
sumprint
b()import
cprofile
#cprofile.run("b()")
cprofile.run("
b()", "
result")
import
pstats
pstats.stats(
'result
').sort_stats(-1).print_stats()
refence
mysql 效能分析 mysql效能分析工具
一 expalin 在sql語句之前加上explain關鍵字就可以獲取這條sql語句執行的計畫 那麼返回的這些欄位是什麼呢?我們先關心一下比較重要的幾個字段 1.select type 查詢型別 1 簡單查詢,沒有union和子查詢 2 priamry 主查詢,有union或子查詢的最外層查詢 3 ...
Python效能分析工具py spy原理用法解析
更多程式設計教程請到 菜鳥教程 py spy介紹 引用官方的介紹 py spy是python程式的抽樣分析器。它允許您視覺化檢視python程式在哪些地方花了更多時間,整個監控方式無需重新啟動程式或以任何方式修改工程 py spy的開銷非常低 它是用rust編寫的,速度與編譯的python程式不在同...
效能分析工具彙總
cpu效能分析工具 vmstat pssar time strace pstree topmemory效能分析工具 vmstat strace topipcs ipcrm cat proc meminfo cat proc slabinfo cat proc maps i o效能分析工具 vmsta...