笔记-Python-cProfile

笔记-Python-cProfile

1. 简介
python官方提供了cProfile和profile对程序进行性能分析,建议使用cProfile;
cProfile:基于lsprof的用C语言实现的扩展应用,运行开销比较合理,适合分析运行时间较长的程序,推荐使用这个模块; 
profile:纯Python实现的性能分析模块,接口和cProfile一致。但在分析程序时增加了很大的运行开销。不过,如果你想扩展profiler的功能,可以通过继承这个模块实现; 
引用于python3.6.5官方文档-标准库-27.4


2. cProfile使用
2.1. 模块简介

profile.run(command,filename = None,sort = -1 )
该函数执行并从执行中收集分析统计数据。如果没有给出文件名,则该函数创建一个Stats 实例并打印一个简单的性能分析报告。如果指定了排序方式,此Stats实例以指定方式排序。
常用参数:
# 直接把分析结果打印到控制台
cProfile.run("test()")
# 把分析结果保存到文件中
cProfile.run("test()", filename="result.out")
# 指定排序方式
cProfile.run("test()", filename="result.out", sort="cumulative")

import cProfile
import re
cProfile.run('re.compile("foo|bar")')
结果
126 function calls in 0.000 seconds #126个调用,数字指原始调用,不包括递归;
Ordered by: standard name #
#调用数量,时间开销(不包括子函数),
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 <string>:1(<module>)
4 0.000 0.000 0.000 0.000 enum.py:265(__call__)
4 0.000 0.000 0.000 0.000 enum.py:515(__new__)
2 0.000 0.000 0.000 0.000 enum.py:801(__and__)
1 0.000 0.000 0.000 0.000 re.py:231(compile)
1 0.000 0.000 0.000 0.000 re.py:286(_compile)
1 0.000 0.000 0.000 0.000
…仅罗列部分

 

class profile.Profile(timer = None,timeunit = 0.0,subcalls = True,builtins = True )
这个类通常只在需要比cProfile.run()函数提供更精确的分析控制时才使用。
使用案例:
import cProfile, pstats, io
pr = cProfile.Profile()
pr.enable()
# ... do something ...
pr.disable()
s = io.StringIO()
sortby = 'cumulative'
ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
ps.print_stats()
print(s.getvalue())
函数释义:
enable()开始收集分析数据。
disable()停止收集分析数据。
create_stats()停止收集性能数据并创建stats对象。
print_stats(sort = -1 )创建一个Stats对象并将结果输出到stdout。
dump_stats(filename)将当前分析的结果写入文件(二进制格式)。
runcall(func, *args, **kwargs): 收集被调用函数func的性能分析数据Stats类
pstats模块提供的Stats类可以帮助我们读取和操作stats文件(二进制格式)

3. 关于Stats类
Stats类源自pstats模块,使用前import pstats
主要用于格式化展示cprofile的分析结果;

Stats类可以接受stats文件名,也可以直接接受cProfile.Profile对象作为数据源。
strip_dirs(): 删除报告中所有函数文件名的路径信息
dump_stats(filename): 把stats中的分析数据写入文件(效果同cProfile.Profile.dump_stats())
sort_stats(*keys): 对报告列表进行排序,函数会依次按照传入的参数排序,关键词包括calls, cumtime等,具体参数参见官方文档;
reverse_order(): 逆反当前的排序
print_stats(*restrictions): 把信息打印到标准输出。*restrictions用于控制打印结果的形式, 例如(10, 1.0, ".*.py.*")表示打印所有py文件的信息的前10行结果。

 

转载于:https://www.cnblogs.com/wodeboke-y/p/9301720.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值