Python效能分析工具Profile

2022-04-04 05:28:04 字數 2957 閱讀 6602

**優化的前提是需要了解效能瓶頸在什麼地方,程式執行的主要時間是消耗在**,對於比較複雜的**可以借助一些工具來定位,python 內建了豐富的效能分析工具,如 profile,cprofile 與 hotshot 等。其中 profiler 是 python 自帶的一組程式,能夠描述程式執行時候的效能,並提供各種統計幫助使用者定位程式的效能瓶頸。python 標準模組提供三種 profilers:cprofile,profile 以及 hotshot。

profile 的使用非常簡單,只需要在使用之前進行

import 即可,也可以在命令列中使用。

測試示例:

import

profile

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庫使用,可以在命令列使用命令。

import

osdef

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

import

osdef

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...