在進行python開發時需要對python指令碼的效能分析,以便對python指令碼進行優化,下面使用cprofile和 pstats對python指令碼效能分析。
cprofile思路
1.使用cprofile模組生成指令碼執行的統計資訊檔案
2.使用pstats格式化統計資訊,並根據需要做排序分析處理
1.使用cprofile模組生成指令碼執行的統計資訊檔案
python -m cprofile -o analyze_result.txt test.py
引數說明:
使用模組當做指令碼執行:-m cprofile
輸出引數:-o analyze_result.txt
測試的python指令碼:test.py
其餘為python指令碼的輸入引數
2.python命令列檢視統計資訊。
執行python:
import pstats
p=pstats.
stats
('analyze_result.txt')p.
print_stats()
#根據呼叫次數排序
p.sort_stats
('calls').
print_stats()
#根據呼叫總時間排序
p.sort_stats
('cumulative').
print_stats
()
*stats類(pstats.stats)說明
strip_dirs() 用以除去檔名前的路徑資訊。
add(filename,[…]) 把profile的輸出檔案加入stats例項中統計
dump_stats(filename) 把stats的統計結果儲存到檔案
sort_stats(key,[…]) 最重要的乙個函式,用以排序profile的輸出
reverse_order() 把stats例項裡的資料反序重排
print_stats([restriction,…]) 把stats報表輸出到stdout
print_callers([restriction,…]) 輸出呼叫了指定的函式的函式的相關資訊
print_callees([restriction,…]) 輸出指定的函式呼叫過的函式的相關資訊
sort_stats支援以下引數:
引數 含義
『calls』 call count
『cumulative』 cumulative time
『file』 file name
『filename』 file name
『module』 module name
『ncalls』 call count
『pcalls』 primitive call count
『line』 line number
『name』 function name
『nfl』 name/file/line
『stdname』 standard name
『time』 internal time
『tottime』 internal time
*乙個比較典型的輸出結果:
197 function calls (192 primitive calls) in 0.002 seconds
ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.001 0.001 :1()
1 0.000 0.000 0.001 0.001 re.py:212(compile)
1 0.000 0.000 0.001 0.001 re.py:268(_compile)
1 0.000 0.000 0.000 0.000 sre_compile.py:172(_compile_charset)
1 0.000 0.000 0.000 0.000 sre_compile.py:201(_optimize_charset)
4 0.000 0.000 0.000 0.000 sre_compile.py:25(_identityfunction)
3/1 0.000 0.000 0.000 0.000 sre_compile.py:33(_compile)
輸出結果說明:
共有197次函式呼叫,原始呼叫為192次,原始呼叫說明不包含遞迴呼叫。
以standard name進行排序。3/1表示發生了遞迴呼叫,1為原始呼叫次數,3為遞迴呼叫次數
ncalls 函式的被呼叫次數
tottime 函式總計執行時間,除去函式中呼叫的函式執行時間
percall 函式執行一次的平均時間,等於tottime/ncalls
cumtime 函式總計執行時間,含呼叫的函式執行時間
percall 函式執行一次的平均時間,等於cumtime/ncalls
filename:lineno(function) 函式所在的檔名,函式的行號,函式名
Python指令碼效能分析
來自 def foo sum 0 for i in range 10000 sum i suma bar sumb bar return sum defbar sum 0 for i in range 100000 sum i return sum if name main import cprof...
PHP提高指令碼效能要點
1.刪除重複項 array keys array flip array 速度比 array unique array 高於30 2.獲取隨機數組記錄 array mt rand 0,count array 1 速度比 array rand array 高於96 3.檢查字串僅包含字母數字字元 cty...
JavaScript網頁指令碼效能優化
訪問dom的方式對指令碼效能會產生非常大的影響。以下面 為例 if document.getelementsbytagname a length 0 這段 可以執行,本身並沒有什麼問題,但它卻不是我們期望的最優性能。細看這段 可以發現其先後兩次使用dom方法getelementsbytagname ...