1. 程式人生 > 程式設計 >python效能測量工具cProfile使用解析

python效能測量工具cProfile使用解析

背景:

Python是一種解釋性的語言,執行速度相比C、C++等語言十分緩慢;因此我們需要在其它地方上下功夫來提高程式碼的執行速度。

首先需要對程式碼進行分析,這個時候則需要用一些工具。

這裡介紹cProfile:

全程式碼分析:

命令列:

cProfile -s tottime your_program.py

結果如下:

ncalls tottime percall cumtime percall filename:lineno(function)
  66  0.001  0.000  11.850  0.180 base.py:228(micro_service)
  66  0.003  0.000  11.849  0.180 tools.py:557(micro_service)
 1056  0.001  0.000  11.073  0.010 connection.py:463(drain_events)
 1056  0.015  0.000  11.072  0.010 connection.py:466(blocking_read)
 1056  0.008  0.000  10.920  0.010 transport.py:233(read_frame)
 3168  0.014  0.000  10.908  0.003 transport.py:370(_read)
 3168  10.892  0.003  10.892  0.003 {method 'recv' of '_socket.socket' objects}
  66  0.001  0.000  9.814  0.149 rpc.py:350(__call__)
  66  0.001  0.000  8.395  0.127 rpc.py:329(result)

塊分析:

上面屬於檔案分析,但是我們可能只對部分程式碼感興趣,那麼只需要在這部分程式碼的前後加上下面這兩段程式碼即可:

import cProfile
cp = cProfile.Profile()
cp.enable()
YOUR CODE
cp.disable()
cp.print_stats()

結果與全程式碼分析的類似,但是隻包含你感興趣的部分。

行分析:

行分析需要安裝line_profiler:

pip install line_profiler
@profile
def class_name()
	pass

然後在命令列輸入:

kernprof -l -v your_code.py
-l 逐行分析
-v 立即檢視結果

示例:

from cProfile import Profile as profile 
from pstats import Stats 
def (): 
	p = profile() 
	p.snapshot_stats() 
	p.enable() 
	
	p.disable() 
	p.print_stats(2) # 按照呼叫累加總耗時累加排序,即將最耗時的函式最優先
	p.dump_stats("call.log")

關於profile和cProfile的更多連結,請點選:

https://docs.python.org/3/library/profile.html?spm=5176.100239.0.0.qa5fU5

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。