python指令碼效能分析

2021-10-09 17:44:49 字數 2522 閱讀 3343

在進行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 ...