python如何分析程式效能

2021-10-04 08:19:34 字數 2094 閱讀 8297

when use profiler?

有時候你覺得程式執行很慢,想對程式進行優化,但是你又不知道哪部分程式入手,這時候你就需要對程式整體效能進行分析,看看速度慢主要是哪部分程式導致的

why use cprofile?

cprofile,乙個python程式效能分析模組。其實python有兩個profiler,profile和cprofile,前者是純python寫的,會產生比較大的開銷,測試結果不準確。後者是c語言擴充套件模組,對受測程式影響比較小,所以推薦用cprofile.

how to use cprofile?

首先有以下程式:

from cprofile import profile 

from pstats import stats

deffor1()

: y =

0for i in

range

(100):

y = y +i

deffor2()

: y =

0for i in

range

(1000000):

y = y + i

deftest()

:

for1(

) for2(

)

現在要對test進行分析:

if __name__ ==

"__main__"

: profiler = profile(

)#建立profiler物件

profiler.runcall(test)

#對test進行測試

stats = stats(profiler)

stats.strip_dirs(

) stats.sort_stats(

'cumulative'

) stats.print_stats(

)

結果如下:

4 function calls in

0.192 seconds

ordered by: cumulative time

ncalls tottime percall cumtime percall filename:lineno(function)

10.000

0.000

0.192

0.192 main.py:

48(test1)

10.192

0.192

0.192

0.192 main.py:

43(for2)

10.000

0.000

0.000

0.000 main.py:

38(for1)

10.000

0.000

0.000

0.000

要分析該結果,我們先要知道幾個名詞的意思(從左到右)

ncalls:函式在效能分析期間呼叫的次數

tottime:函式總的執行時間,除去子函式的執行時間

percall:tottime/ncalls

cumtime:該函式包括子函式的累計時間

percall:cumtime/ncalls

filename:lineno(function):函式呼叫的資訊

ok,到這裡,你就可以看出來for2函式執行時間是最長的了,因為它cumtime比for1的大。

我們還使用了pstats的stats類:

stats = stats(profiler):建立物件

stats.strip_dirs():去掉無關路徑資訊

stats.sort_stats(『cumulative』):按累計時間進行排序,也可以按照calls, cumulative,line, module, name, nfl, pcalls, stdname, time進行排序

stats.print_stats():列印統計訊息,如果想列印top2的資訊,則 stats.print_stats(2)

python程式效能分析

目錄 python m cprofile o output file s sort order m module myscript.py o將結果輸出到檔案而不是stdout s排序狀態,選擇那些引數排序,常用 tottime m作為乙個模組而不是指令碼,python3.7的cprofile中有,p...

Python內建型別程式效能分析

timeit模組可以用來測試一小段python 的執行速度。class timeit.timer stmt pass setup pass timer timer是測量小段 執行速度的類。stmt引數是要測試的 語句 statment setup引數是執行 時需要的設定 timer引數是乙個定時器函...

golang程式效能分析

vegeta是乙個用go語言編寫的多功能的http負載測試工具,提供命令列工具和開發包。安裝見vegeta 說明。usage vegeta global flags command flags global flags cpus int 使用cup的數量 預設4 個 profile string e...