想了解一下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性能分析器相关推荐

  1. python性能分析工具模块_python——关于Python Profilers性能分析器

    1. 介绍性能分析器 profiler是一个程序,用来描述运行时的程序性能,并且从不同方面提供统计数据加以表述.Python中含有3个模块提供这样的功能,分别是cProfile, profile和ps ...

  2. python测试代码与模块_测量Python代码运行时间

    Python 社区有句俗语: "python自己带着电池" ,别自己写计时框架. Python 2.3 具备一个叫做 timeit 的完美计时工具可以测量python代码的运行时间 ...

  3. python性能分析工具模块_Python Profilers 分析器

    实时用户手册¶ 本节是为 "不想阅读手册" 的用户提供的.它提供了非常简短的概述,并允许用户快速对现有应用程序执行评测. 要分析采用单个参数的函数,可以执行以下操作: import ...

  4. python代码测试工具模块_详解Python中的测试工具

    当我们在写程序的时候,我们需要通过测试来验证程序是否出错或者存在问题,但是,编写大量的测试来确保程序的每个细节都没问题会显得很繁琐.在Python中,我们可以借助一些标准模块来帮助我们自动完成测试过程 ...

  5. python股票分析源码_用python开发股票自动技术分析的软件

    一.配置环境 python是个强大的工具,还有很多插件包可以用,所以完全可以考虑用python来编程实现股票的自动技术分析. 第一步就是实现股票历史数据的获取,这个有安装包TuShare可以用.首先是 ...

  6. python 定时执行 爬虫 模块_【Python】定时执行网站爬虫

    今天我们额讨论如何使用Python,SQLite数据库与crontab工具将爬虫程序部署到服务器上并实现定时爬取存储 编写爬虫代码 编写一个爬虫程序,使用requests与beautifulsoup4 ...

  7. python getattr调用自己模块_在Python中通过getattr获取对象引用的方法

    getattr函数 (1)使用 getattr 函数,可以得到一个直到运行时才知道名称的函数的引用. >>> li = ["Larry", "Curly ...

  8. python中的utils模块_使用Python的package机制如何简化utils包设计详解

    package 机制 package是模块的集合,每一个Package的根目录下面都应当有一个__init__.py 文件.当解释器发现目录下有这个文件时,他就会认为这是一个Package,而不是一个 ...

  9. python 定时执行 爬虫 模块_浅析python实现scrapy定时执行爬虫

    项目需要程序能够放在超算中心定时运行,于是针对scrapy写了一个定时爬虫的程序main.py ,直接放在scrapy的存储代码的目录中就能设定时间定时多次执行. 最简单的方法:直接使用Timer类 ...

  10. python如何导入自定义模块_【python】导入自定义模块

    一.直接import 1.当执行文件与要导入的py文件在同一目录下时 假设要在wangyi.py中导入weibo.py文件 import weibo 2.当执行文件与要导入的py文件所在文件夹在同一目 ...

最新文章

  1. 网页提示未认证授权的应用服务器,授权认证(IdentityServer4)
  2. C# CheckBox与RadioButton
  3. 使用QtService实现Qt后台服务程序
  4. IPv6时代已来:双十一中的IPv6大规模应用实践
  5. Redis2.8的安装教程,linux下
  6. C语言极坐标转直角坐标,C语言实现直角坐标转换为极坐标的方法
  7. Windows Server 2003 系统安装
  8. html如何让标签居中显示,HTML怎么让标签居中
  9. 形式语言与自动机 下推自动机
  10. oracle元转换为万元,Excel表格中快速实现元转换成以万元显示的方法
  11. ios-swift-环信集成
  12. WIFI-WPA破解
  13. MIT 线性代数导论 第十九、二十讲:行列式公式、代数余子式、克拉默法则
  14. C#工控上位机实例_南京物流仓库【仓库物流】_智能云仓储库存wms管理分配货_电子标签价签拣货系统_工控erp上位机软件开发设计...
  15. Geosoft Oasis.Montaj.v7.1.1简介
  16. LOJ 534 花团(线段树+dfs栈)
  17. shell 四种循环详解
  18. 带按扭的轮换横幅广告
  19. DWARF调试格式的简介
  20. Python制做动态图

热门文章

  1. Centos yum安装snmp
  2. linux环境下给文件加密/解密的方法
  3. 【性能优化】增量检查点
  4. C和指针 (pointers on C)——第十章:结构体和联合(上)
  5. 经典排序之 归并排序
  6. Lucene2.4.0一般查询结果过滤与排行
  7. 如何在打开谷歌的时候强制跳转google.com
  8. react实现聊天界面_React-Redux 100行代码简易版探究原理
  9. ajax php 数组参数传递参数,jquery中ajax传递中文参数和js数组问题
  10. python读取特定单词_Python:如何从txt文件中的特定单词开始读取到文件结尾