python函数性能 python代码( 七 )


下面给出的是一个非常短的控制台会话实例 , 为使其适合页面展示,进行了适当调整 , 我们自己的输入则以粗体展示:
$ python3 -m cProfile -o profile.dat MyModule.py
$ python3 -m pstats
Welcome to the profile statistics browser.
% read profile.dat
profile.dat% callers function_b
Random listing order was used
List reduced from 44 to 1 due to restriction
Function was called by...
ncalls tottime cumtime
:27(function_b) - 1000 0.011 22.251:12( )
profile.dat% callees function_b
Random listing order was used
List reduced from 44 to 1 due to restriction
Function called...
ncalls tottime cumtime
:27(function_b)-
1000 0.005 0.005 built-in method bisectJeft
1000 0.001 0.001 built-in method len
1000 1 5.297 22.234 built-in method sorted
profile.dat% quit
输入help可以获取命令列表 , help后面跟随命令名可以获取该命令的更多信息 。比如, help stats将列出可以赋予stats命令的参数 。还有其他一些可用的工具,可以提供profile数据的图形化展示形式,比如 RunSnakeRun (), 该工具需要依赖于wxPython GUI库 。
使用timeit与cProfile模块 , 我们可以识别出我们自己代码中哪些区域会耗费超过预期的时间;使用cProfile模块,还可以准确算岀时间消耗在哪里 。
以上内容部分摘自视频课程 05后端编程Python-19调试、测试和性能调优(下)  , 更多实操示例请参照视频讲解 。跟着张员外讲编程,学习更轻松,不花钱还能学习真本领 。
Python通过装饰器并使用cprofile对函数进行性能分析Python中提供了很多接口方便我们能够灵活进行性能分析,包括cProfile模块中的Profile类和pstat模块中的Stats类 。
--cprofile是一种确定性分析器,只测量CPU时间,并不关心内存的消耗情况和其他与内存相关联的信息
--它是基于Isprof的用C语言实现的扩展应用 , 运行开销比较合理 , 适合分析运行时间较长的程序
--enable(): 开始进行性能分析并收集数据
--disableI(): 停止性能分析
--create_stats(): 停止收集数据 , 并为已经收集的数据创建stats对象
--print_stats():创建stats对象并打印分析结果
--dump_stats(filename): 把当前性能分析的内容写入文件filename中
--runcall(func, *args, **kwargs): 收集被调用函数func的性能分析信息
--用来分析cProfile输出的文件内容
--pstas模块为开发者提供了Stats类 , 可以读取和操作stats文件
(Stats类可以接受stats文件名,也可以直接接受cProfile.Profile对象作为数据源 。)
--strip_dirs(): 删除报告中所有函数文件名的路径信息
--dump_stats(filename): 把stats中的分析数据写入文件(也可以写成cProfile.Profile.dump_stats())
--sort_stats(*keys): 对报告列表进行排序,函数会一次按照传入的参数排序
--reverse_order(): 逆反当前的排序
--print_stats(*restrictions): 把信息打印到标准输出 。*restrictions用于控制打印结果的形式,比如(10,1.0,".*.py.*")表示打印所有py文件的信息的前10行结果
--第一行表示运行这个函数一共使用0.043秒,执行了845次函数调用
--第二行表示结果是按什么顺序排列的(这里表示按照调用次数来进行排列的)
--ncalls: 表示函数调用的次数(有两个数值表示有递归调用,总调用次数/原生调用次数)
--tottime: 函数内部调用时间(不包括他自己调用的其他函数时间)
--percall: tottime/ncalls
--cumtime: 表示累计调用时间(函数执行玩的总时间),它包含了函数自己内部调用的函数时间