python性能分析工具模块_关于Python Profilers性能分析器
想了解一下python的性能调试方法,结果就看到这一篇文章,想翻译下来作个记录
1. 介绍性能分析器
profiler是一个程序,用来描述运行时的程序性能,并且从不同方面提供统计数据加以表述。Python中含有3个模块提供这样的功能,分别是cProfile, profile和pstats。这些分析器提供的是对Python程序的确定性分析。同时也提供一系列的报表生成工具,允许用户快速地检查分析结果。
Python标准库提供了3个不同的性能分析器: cProfile,推荐给大部分的用户,是C的一个扩展应用,因为其合理的运行开销,所以适合分析运行时间较长的。是基于lsprof。
profile,一个纯python模块,它的接口和cProfile一致。在分析程序时,增加了很大的运行开销。如果你想扩展profiler的功能,可以试着继承这个模块
hotshot, 一个试验性的c模块,关注减少分析时的运行开销,但是是以需要更长的数据后处理的次数为代价。不过这个模块不再被维护,也有可能在新的python版本中被弃用。
2. 使用方法 def foo():
sum = 0
for i in range(10000):
sum += i
sumA = bar()
sumB = bar()
return sum
def bar():
sum = 0
for i in 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 Profilers性能分析器相关推荐
- python性能分析工具模块_python——关于Python Profilers性能分析器
1. 介绍性能分析器 profiler是一个程序,用来描述运行时的程序性能,并且从不同方面提供统计数据加以表述.Python中含有3个模块提供这样的功能,分别是cProfile, profile和ps ...
- python测试代码与模块_测量Python代码运行时间
Python 社区有句俗语: "python自己带着电池" ,别自己写计时框架. Python 2.3 具备一个叫做 timeit 的完美计时工具可以测量python代码的运行时间 ...
- python性能分析工具模块_Python Profilers 分析器
实时用户手册¶ 本节是为 "不想阅读手册" 的用户提供的.它提供了非常简短的概述,并允许用户快速对现有应用程序执行评测. 要分析采用单个参数的函数,可以执行以下操作: import ...
- python代码测试工具模块_详解Python中的测试工具
当我们在写程序的时候,我们需要通过测试来验证程序是否出错或者存在问题,但是,编写大量的测试来确保程序的每个细节都没问题会显得很繁琐.在Python中,我们可以借助一些标准模块来帮助我们自动完成测试过程 ...
- python股票分析源码_用python开发股票自动技术分析的软件
一.配置环境 python是个强大的工具,还有很多插件包可以用,所以完全可以考虑用python来编程实现股票的自动技术分析. 第一步就是实现股票历史数据的获取,这个有安装包TuShare可以用.首先是 ...
- python 定时执行 爬虫 模块_【Python】定时执行网站爬虫
今天我们额讨论如何使用Python,SQLite数据库与crontab工具将爬虫程序部署到服务器上并实现定时爬取存储 编写爬虫代码 编写一个爬虫程序,使用requests与beautifulsoup4 ...
- python getattr调用自己模块_在Python中通过getattr获取对象引用的方法
getattr函数 (1)使用 getattr 函数,可以得到一个直到运行时才知道名称的函数的引用. >>> li = ["Larry", "Curly ...
- python中的utils模块_使用Python的package机制如何简化utils包设计详解
package 机制 package是模块的集合,每一个Package的根目录下面都应当有一个__init__.py 文件.当解释器发现目录下有这个文件时,他就会认为这是一个Package,而不是一个 ...
- python 定时执行 爬虫 模块_浅析python实现scrapy定时执行爬虫
项目需要程序能够放在超算中心定时运行,于是针对scrapy写了一个定时爬虫的程序main.py ,直接放在scrapy的存储代码的目录中就能设定时间定时多次执行. 最简单的方法:直接使用Timer类 ...
- python如何导入自定义模块_【python】导入自定义模块
一.直接import 1.当执行文件与要导入的py文件在同一目录下时 假设要在wangyi.py中导入weibo.py文件 import weibo 2.当执行文件与要导入的py文件所在文件夹在同一目 ...
最新文章
- 网页提示未认证授权的应用服务器,授权认证(IdentityServer4)
- C# CheckBox与RadioButton
- 使用QtService实现Qt后台服务程序
- IPv6时代已来:双十一中的IPv6大规模应用实践
- Redis2.8的安装教程,linux下
- C语言极坐标转直角坐标,C语言实现直角坐标转换为极坐标的方法
- Windows Server 2003 系统安装
- html如何让标签居中显示,HTML怎么让标签居中
- 形式语言与自动机 下推自动机
- oracle元转换为万元,Excel表格中快速实现元转换成以万元显示的方法
- ios-swift-环信集成
- WIFI-WPA破解
- MIT 线性代数导论 第十九、二十讲:行列式公式、代数余子式、克拉默法则
- C#工控上位机实例_南京物流仓库【仓库物流】_智能云仓储库存wms管理分配货_电子标签价签拣货系统_工控erp上位机软件开发设计...
- Geosoft Oasis.Montaj.v7.1.1简介
- LOJ 534 花团(线段树+dfs栈)
- shell 四种循环详解
- 带按扭的轮换横幅广告
- DWARF调试格式的简介
- Python制做动态图
热门文章
- Centos yum安装snmp
- linux环境下给文件加密/解密的方法
- 【性能优化】增量检查点
- C和指针 (pointers on C)——第十章:结构体和联合(上)
- 经典排序之 归并排序
- Lucene2.4.0一般查询结果过滤与排行
- 如何在打开谷歌的时候强制跳转google.com
- react实现聊天界面_React-Redux 100行代码简易版探究原理
- ajax php 数组参数传递参数,jquery中ajax传递中文参数和js数组问题
- python读取特定单词_Python:如何从txt文件中的特定单词开始读取到文件结尾