国产成人AV无码一二三区,少女1到100集,国产精品久久久久精品综合紧,巜公妇之诱感肉欲HD在线播放

文章 > Python基础教程 > Python性能之cProfile和line_profile搭配使用!

Python性能之cProfile和line_profile搭配使用!

头像

 Ly

2020-06-18 15:35:273782浏览 · 0收藏 · 0评论

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")')

结果分析:

p1.jpg

第一行: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() # 展示结果

结果分析

p1.jpg

Line:文件中的行号。

Hits:性能分析时代码执行的次数。

Time:一段代码执行的总时间,由计数器决定。

Per Hit:执行一段代码平均消耗时间。

% Time:执行一段代码时间消耗比例。

三,搭配使用

先用cProfile确定项目中耗时最多的几个函数,然后用line_profiler分析这几个耗时最多的函数,确定行性能瓶颈。

更多Python知识,请关注Python视频教程!!

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

女性三角毛毛区有片毛掉光正常吗| 美国人免费观看高清电视剧的软件 | 学长突然把自慰器开到最大| 来吧儿子妈妈是纯还是混| 蜜桃览器| 《丰满人妻的滋味2HD| 一线产区和二线产区的品牌定位| 蜜源APP| 男女主亲密缠绕的画面真人版| 啵啵| 《菊内留香》双男主| 1尿到0的直肠里| B站暴躁女RAPPER| 丁香花影院免费观看电视剧哈尔滨 | 《寂寞的背叛》免费播放| 狗锁住女人狗的视频大全图片| 神咲诗织| 无耻家庭凯伦跟妈妈是哪一集| 《从上司到妻子》动画结局| 男生亲你阴部代表什么心理| 马配人能配进去吗| 《家访的老师》动漫在线观看| XX| 老和尚猛挺进她莹莹的体导演是谁| 9.1萝卜黄| 一母四女共一婿的全诗解读| 疯狂精力旺盛的女婿小说免费阅读| 孤男寡女干柴烈火的下一句是什么| 游泳教练在水下狂C我| 我的小后妈中字ID| 器材室轮-J-(1):蒙着眼在...| 玉蒲团2之艳乳欲仙| 一线产区和二线产区的标准图| JD又大又粗又长又硬受不了| 黑人空乘伦理5| 今天的高清视频在线观看高清 | 学校体检要用手扒开前面吗| 苏苏的骚浪短笔趣阁小说| 女性左腿又开腿肚子视频大全 | 舌头伸进去添的我爽高潮| 《熟妇的荡欲》HD中字