來自:
def執行:python -m cprofile t12.py,列印結果: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
cprofile
#直接把分析結果列印到控制台
cprofile.run("
foo()")
#把分析結果儲存到檔案中,不過內容可讀性差...需要呼叫pstats模組分析結果
cprofile.run("
foo()
", "
result")
#還可以直接使用命令列進行操作
#>python -m cprofile myscript.py -o result
import
pstats
#建立stats物件
p = pstats.stats("
result")
#這一行的效果和直接執行cprofile.run("foo()")的顯示效果是一樣的
p.strip_dirs().sort_stats(-1).print_stats()
#strip_dirs():從所有模組名中去掉無關的路徑資訊
#sort_stats():把列印資訊按照標準的module/name/line字串進行排序
#print_stats():列印出所有分析資訊
#按照函式名排序
p.strip_dirs().sort_stats("
name
").print_stats()
#按照在乙個函式中累積的執行時間進行排序
#print_stats(3):只列印前3行函式的資訊,引數還可為小數,表示前百分之幾的函式資訊
p.strip_dirs().sort_stats("
cumulative
").print_stats(3)
#還有一種用法
p.sort_stats('
time
', '
cum').print_stats(.5, '
foo'
)
#先按time排序,再按cumulative時間排序,然後打倒出前50%中含有函式資訊
#如果想知道有哪些函式呼叫了bar,可使用
p.print_callers(0.5, "
bar")
#同理,檢視foo()函式中呼叫了哪些函式
p.print_callees("
foo")
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等
# 增加排序方式
python -m cprofile -s cumulative
t2
.py #按照cumulative排序
python指令碼效能分析
在進行python開發時需要對python指令碼的效能分析,以便對python指令碼進行優化,下面使用cprofile和 pstats對python指令碼效能分析。cprofile思路 1.使用cprofile模組生成指令碼執行的統計資訊檔案 2.使用pstats格式化統計資訊,並根據需要做排序分析...
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 ...