python性能分析工具模块_python——关于Python Profilers性能分析器
1. 介绍性能分析器
profiler是一个程序,用来描述运行时的程序性能,并且从不同方面提供统计数据加以表述。Python中含有3个模块提供这样的功能,分别是cProfile, profile和pstats。这些分析器提供的是对Python程序的确定性分析。同时也提供一系列的报表生成工具,允许用户快速地检查分析结果。
Python标准库提供了3个不同的性能分析器:
cProfile,推荐给大部分的用户,是C的一个扩展应用,因为其合理的运行开销,所以适合分析运行时间较长的。是基于lsprof。
profile,一个纯python模块,它的接口和cProfile一致。在分析程序时,增加了很大的运行开销。如果你想扩展profiler的功能,可以试着继承这个模块
hotshot, 一个试验性的c模块,关注减少分析时的运行开销,但是是以需要更长的数据后处理的次数为代价。不过这个模块不再被维护,也有可能在新的python版本中被弃用。
2. 使用方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
def foo():
sum = 0
for iin range(10000):
sum += i
sumA= bar()
sumB= bar()
return sum
def bar():
sum = 0
for iin range(100000):
sum += i
return sum
if __name__== "__main__":
import cProfile
#直接把分析结果打印到控制台
cProfile.run("foo()")
#把分析结果保存到文件中,不过内容可读性差...需要调用pstats模块分析结果
cProfile.run("foo()","result")
#还可以直接使用命令行进行操作
#>python -m cProfile myscript.py -o result
import pstats
#创建Stats对象
p= pstats.Stats("result")
#这一行的效果和直接运行cProfile.run("foo()")的显示效果是一样的
p.strip_dirs().sort_stats(-1).print_stats()
#strip_dirs():从所有模块名中去掉无关的路径信息
#sort_stats():把打印信息按照标准的module/name/line字符串进行排序
#print_stats():打印出所有分析信息
#按照函数名排序
p.strip_dirs().sort_stats("name").print_stats()
#按照在一个函数中累积的运行时间进行排序
#print_stats(3):只打印前3行函数的信息,参数还可为小数,表示前百分之几的函数信息
p.strip_dirs().sort_stats("cumulative").print_stats(3)
#还有一种用法
p.sort_stats('time','cum').print_stats(.5,'foo')
#先按time排序,再按cumulative时间排序,然后打倒出前50%中含有函数信息
#如果想知道有哪些函数调用了bar,可使用
p.print_callers(0.5,"bar")
#同理,查看foo()函数中调用了哪些函数
p.print_callees("foo")
以上是profile以及pstats模块的简单应用.
3.分析结果图解
4. 什么是确定性性能分析(Deterministic Profiling)
确定性性能分析指的是反映所有的函数调用,返回,和异常事件的执行所用的时间,以及它们之间的时间间隔。相比之下,统计性性能分析指的是取样有效的程序指令,然后推导出所需要的时间,后者花费比较少的开销,但是给出的结果不够精确。
在Python中,因为其是解释性语言,所以在执行程序的时候,会加入解释器的执行,这部分的执行是不需要进行性能分析的。Python自动为每一个事件提供一个hook,来定位需要分析的代码。除此之外,因为Python解释型语言的本质往往需要在执行程序的时候加入很多其它的开销,而确定性性能分析只会加入一点点处理开销。这样一来,确定性性能分析其实开销不大,还可以提供丰富的统计信息。
函数调用次数的统计能够被用于确定程序中的bug,比如一个不符合常理的次数,明显偏多之类的,还可以用来确定可能的内联函数。函数内部运行时间的统计可被用来确定”hot loops”,那些需要运行时间过长,需要优化的部分;累积时间的统计可被用来确定比较高层次的错误,比如算法选择上的错误。Python的性能分析可以允许直接比较算法的递归实现与迭代实现的。
python性能分析工具模块_python——关于Python Profilers性能分析器相关推荐
- python性能分析工具模块_Python Profilers 分析器
实时用户手册¶ 本节是为 "不想阅读手册" 的用户提供的.它提供了非常简短的概述,并允许用户快速对现有应用程序执行评测. 要分析采用单个参数的函数,可以执行以下操作: import ...
- mysql性能分析工具profiling_Mysql系列(十)—— 性能分析工具profiling
explain是从mysql怎样解析执行sql的角度分析sql优劣.profiling是从sql执行时资源使用情况的角度来分析sql. 分析SQL执行带来的开销是优化SQL的重要手段.在MySQL数据 ...
- python测试代码与模块_测量Python代码运行时间
Python 社区有句俗语: "python自己带着电池" ,别自己写计时框架. Python 2.3 具备一个叫做 timeit 的完美计时工具可以测量python代码的运行时间 ...
- .NET 11 个 Visual Studio 代码性能分析工具
原文地址 软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行 ...
- 11 个 Visual Studio 代码性能分析工具
软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和 ...
- linux 解析pdf下载工具,Linux高级系统级性能分析工具-perf.pdf
Linux高级系统级性能分析工具-perf Linux 的系统级性能剖析工具‐perf (二) 承刚 TAOBAO Kernel Team chenggang.qin@ 第三章 Perf top ...
- java 对比工具_Java几款性能分析工具的对比
在给客户进行应用程序维护的过程中,我注意到一些关于高负载条件下的性能问题.理论上,增加对应用程序的负载会使性能有所下降,但是我认为性能下降的比率远远高于负载的增加,同时我也发现,性能可以通过改变应用程 ...
- Java几款性能分析工具的对比
在给客户的应用程序维护的过程中,我注意到在高负载下的一些性能问题.理论上,增加对应用程序的负载会使性能等比率的下降.然而,我认为性能下降的比率远远高于负载的增加.我也发现,性能可以通过改变应用程序的逻 ...
- python性能分析工具总结
性能分析工具的使用 cProfile 介绍 它是一种确定性的性能分析器,提供了一组API帮助开 发者收集Python程序运行的信息,更确切地说,是统计每个函数消耗的 CPU时间.同时它还提供了其他细节 ...
最新文章
- getcoo php_PHP简单实现DES加密解密的方法
- 恩智浦智能车大赛2020_2020年中国人工智能机器人大赛在宝鸡市会展中心举办
- 震惊!上手就是快,GitHub18.5K标星,超实用的Python资源
- 关于vue父子组件之间事件触发及数据传递问题
- Linux服务器配置---安装vsftpd
- 搭建一个简单的FTP服务器
- Matlab--根据bar 的值,用不同的color画
- 大话设计模式-原型模式的浅复制与深复制
- oracle笔记整理14——性能调优之oracle执行计划
- 用matlab算特征值,用Matlab用计算特征值和特征向量
- Progressive LayeredExtraction(PLE):ANovelMulti-Task Learning(MTL)ModelforPersonalizedRecommendations
- pthread_cond_init 初始化条件变量使用
- HR-Saas(二):登录模块
- linux下USB3.0端口无法识别3.0设备
- 天嵌科技——TQIMX6Q光盘8月更新说明
- distinct返回null报错_distinct
- jdbc shadring 扩容_shadring-jdbc解决查询数据库分库分表的问题
- ubuntu命令行查看dns_Ubuntu命令行网络配置
- [LeetCode]122. Best Time to Buy and Sell Stock II
- 马航 失联飞机 猜想
热门文章
- 英雄会被表彰,这些技术与代码也将被历史铭记
- 我的10年富士康故事
- FPGA学习之路—应用程序—原码二位乘法器及Verilog代码分析
- 基于Nexys4 DDR的弹球游戏实现
- 计算机基础及wps office应用_自考本科计算机应用基础考试大纲
- python二维高斯分布生成_python 多维高斯分布数据生成方式
- python训练手势分类器_使用Pytorch训练分类器详解(附python演练)
- ECMS系统服务器死机的处理,内存问题服务器死机一例
- python3性能还低吗_谁说Python性能差的?-- 让python比awk快 (3)
- html去除分页符,Word如何取消分页符