欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

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

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

10余年的扎蘭屯網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。網(wǎng)絡(luò)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整扎蘭屯建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)公司從事“扎蘭屯網(wǎng)站設(shè)計”,“扎蘭屯網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

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

一,cProfile

cProfile是python默認的性能分析器

cProfile是一種確定性分析器,只測量CPU時間,并不關(guān)心內(nèi)存消耗和其他與內(nèi)存相關(guān)聯(lián)的信息。

參數(shù)分析:

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

使用方法一:

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

結(jié)果分析:

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

第一行:129個函數(shù)調(diào)用被監(jiān)控,其中128個是原生調(diào)用(不涉及遞歸)

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

tottime:函數(shù)內(nèi)部消耗的總時間。(可以幫助優(yōu)化)

percall:是tottime除以ncalls,一個函數(shù)每次調(diào)用平均消耗時間。

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

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

使用方法二:

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

使用方法三:控制臺

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

結(jié)果分析:

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

結(jié)果讀取:pstats模塊和Stats類

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

二,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會把分析結(jié)果寫入aaa.py.lprof文件

使用方法二:函數(shù)調(diào)用

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

結(jié)果分析

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

Line:文件中的行號。

Hits:性能分析時代碼執(zhí)行的次數(shù)。

Time:一段代碼執(zhí)行的總時間,由計數(shù)器決定。

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

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

三,搭配使用

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

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

分享名稱:Python性能之cProfile和line_profile搭配使用的方法
URL分享:http://chinadenli.net/article44/jgpoee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司動態(tài)網(wǎng)站面包屑導(dǎo)航網(wǎng)站維護商城網(wǎng)站網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)