中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python性能之cProfile和line_profile搭配使用的方法

發布時間:2020-06-24 16:31:34 來源:億速云 閱讀:364 作者:清晨 欄目:編程語言

這篇文章將為大家詳細講解有關Python性能之cProfile和line_profile搭配使用的方法,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

python性能調試過程中最突出的問題就是耗時,性能測試工具有很多,這里介紹cprofile和line_profiler的搭配使用方法。前者返回項目中每個函數的耗時,后者可以分析函數每一行的耗時。

一,cProfile

cProfile是python默認的性能分析器

cProfile是一種確定性分析器,只測量CPU時間,并不關心內存消耗和其他與內存相關聯的信息。

參數分析:

run(statement, filename=None, sort=-1)
# statement: 需要測試的代碼或者函數(函數名)
# fielname: 結果保存的位置, 默認為stdout
# sort: 結果排序方法,常用的有‘cumtime': 累積時間, ’name': 函數名, ‘line': 行號
# 以及下面結果分析里的’ncalls'等

使用方法一:

import re
import cProfile
cProfile.run('re.compile("abc")')

結果分析:

Python性能之cProfile和line_profile搭配使用的方法

第一行:129個函數調用被監控,其中128個是原生調用(不涉及遞歸)

ncalls:函數被調用的次數。如果這一列有兩個值,就表示有遞歸調用,第二個值是原生調用次數,第一個值是總調用次數。

tottime:函數內部消耗的總時間。(可以幫助優化)

percall:是tottime除以ncalls,一個函數每次調用平均消耗時間。

cumtime:之前所有子函數消費時間的累計和。

filename:lineno(function):被分析函數所在文件名、行號、函數名。

使用方法二:

import cProfile
import re
cProfile.run('re.compile("abc")', 'result.out', 'cumtime')

使用方法三:控制臺

終端:python -m cProfile -o result.out -s cumulative test.py
# 效果同方法二

結果分析:

結果保存在文件名為result.out的二進制文件里。

結果讀取:pstats模塊和Stats類

import pstats
def view_profile(path):
    p = pstats.Stats(f"{path}")
    p.sort_stats("cumulative")  # 表示結果按照累計時間耗費排序,其它排序同上
    p.print_stats(3)  # 輸出結果 輸出結果的前三行,參數還可以是0,1之間的小數,表示輸出結果的占比,沒有參數表示輸出全部結果
    p.print_callers()  # 可以顯示函數被哪些函數調用
    p.print_callees()  # 可以顯示哪個函數調用了哪些函數

二,line_profiler

這個性能分析器和cProfile不同,他能幫你一行一行的分析性能。

如果瓶頸問題在某一行中,這樣就需要line_profiler解決了。

建議使用kernprof工具

安裝

pip install line_profiler

使用方法一:kernprof

@profile
def fib(n):
    # 文件名aaa.py
    a, b = 0, 1
    for i in range(0, n):
        a, b = b, a+b
    return a
fib(5)
終端:kernprof -l -v aaa.py
# -l表示逐行分析 -v用于控制臺輸出, 不加-v會把分析結果寫入aaa.py.lprof文件

使用方法二:函數調用

from line_profiler import LineProfiler
def test_line(func_name, parameter=None):
    “”“
    :param: func_name, str, 函數名
    :param: parameter, 函數參數
    ”“”
    lp = LineProfiler()
    lp_wrapper = lp(func_name)
    if parameter is not None:
        lp_wrapper(parameter) #如果有參數,沒參數不用寫
    lp.print_stats() # 展示結果

結果分析

Python性能之cProfile和line_profile搭配使用的方法

Line:文件中的行號。

Hits:性能分析時代碼執行的次數。

Time:一段代碼執行的總時間,由計數器決定。

Per Hit:執行一段代碼平均消耗時間。

% Time:執行一段代碼時間消耗比例。

三,搭配使用

先用cProfile確定項目中耗時最多的幾個函數,然后用line_profiler分析這幾個耗時最多的函數,確定行性能瓶頸。

關于Python性能之cProfile和line_profile搭配使用的方法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

郧西县| 郎溪县| 迭部县| 东源县| 阿拉善左旗| 桂林市| 沧州市| 衡水市| 汾阳市| 延庆县| 棋牌| 文昌市| 浦北县| 通许县| 沾化县| 东海县| 弥勒县| 上高县| 论坛| 柳州市| 望都县| 合川市| 临江市| 若尔盖县| 玉林市| 隆德县| 西华县| 渭源县| 襄垣县| 浦江县| 顺昌县| 凤翔县| 沧源| 紫阳县| 东乌| 灵武市| 鄯善县| 汉阴县| 镇雄县| 中方县| 淮安市|