Python性能分析工具Profile使用实例


Posted in Python onNovember 19, 2019

这篇文章主要介绍了Python性能分析工具Profile使用实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

代码优化的前提是需要了解性能瓶颈在什么地方,程序运行的主要时间是消耗在哪里,对于比较复杂的代码可以借助一些工具来定位,python 内置了丰富的性能分析工具,如 profile,cProfile 与 hotshot 等。其中 Profiler 是 python 自带的一组程序,能够描述程序运行时候的性能,并提供各种统计帮助用户定位程序的性能瓶颈。Python 标准模块提供三种 profilers:cProfile,profile 以及 hotshot。

profile 的使用非常简单,只需要在使用之前进行 import 即可,也可以在命令行中使用。

使用Profile

测试示例:

import profile
def a():
  sum = 0
  for i in range(1, 10001):
    sum += i
  return sum

def b():
  sum = 0
  for i in range(1, 100):
    sum += a()
  return sum
if __name__ == "__main__":
  profile.run("b()")

输出结果:

<br data-filtered="filtered"> 104 function calls in 0.094 seconds
 
Ordered by: standard name
 
ncalls tottime percall cumtime percall filename:lineno(function)
   1  0.000  0.000  0.094  0.094 :0(exec)
   1  0.000  0.000  0.000  0.000 :0(setprofile)
   1  0.000  0.000  0.094  0.094 <string>:1(<module>)
   1  0.000  0.000  0.094  0.094 profile:0(b())
   0  0.000       0.000     profile:0(profiler)
  99  0.094  0.001  0.094  0.001 test.py:15(a)
   1  0.000  0.000  0.094  0.094 test.py:21(b)

其中输出每列的具体解释如下:

●ncalls:表示函数调用的次数;

●tottime:表示指定函数的总的运行时间,除掉函数中调用子函数的运行时间;

●percall:(第一个 percall)等于 tottime/ncalls;

●cumtime:表示该函数及其所有子函数的调用运行的时间,即函数开始调用到返回的时间;

●percall:(第二个 percall)即函数运行一次的平均时间,等于 cumtime/ncalls;

●filename:lineno(function):每个函数调用的具体信息;

如果需要将输出以日志的形式保存,只需要在调用的时候加入另外一个参数。如 profile.run(“profileTest()”,”testprof”)。

命令行

如果我们不想在程序中调用profile库使用,可以在命令行使用命令。

import os

def a():
  sum = 0
  for i in range(1, 10001):
    sum += i
  return sum

def b():
  sum = 0
  for i in range(1, 100):
    sum += a()
  return sum

print b()

运行命令查看性能分析结果

python -m cProfile test.py

将性能分析结果保存到result文件

python -m cProfile -o result test.py

使用pstats来格式化显示结果

python -c "import pstats; p=pstats.Stats('reslut); p.print_stats()"

python -c "import pstats; p=pstats.Stats('result'); p.sort_stats('time').print_stats()

sort_stats支持以下参数:

calls, cumulative, file, line, module, name, nfl, pcalls, stdname, time

测试示例:在代码中直接使用profile与stats

import os
def a():
	sum = 0
for i in range(1, 10001):
	sum += i
return sum
def b():
	sum = 0
for i in range(1, 100):
	sum += a()
return sum
print b()
import cProfile# cProfile.run("b()")
cProfile.run("b()", "result")
import pstats
pstats.Stats('result').sort_stats(-1).print_stats()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python tempfile模块学习笔记(临时文件)
May 25 Python
Python实现监控程序执行时间并将其写入日志的方法
Jun 30 Python
Python 含参构造函数实例详解
May 25 Python
python2与python3的print及字符串格式化小结
Nov 30 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
Dec 07 Python
图文详解python安装Scrapy框架步骤
May 20 Python
Python控制Firefox方法总结
Jun 03 Python
对Python的交互模式和直接运行.py文件的区别详解
Jun 29 Python
基于Python的图像数据增强Data Augmentation解析
Aug 13 Python
Pytorch: 自定义网络层实例
Jan 07 Python
Python实例方法、类方法、静态方法区别详解
Sep 05 Python
如何利用python创作字符画
Jun 25 Python
使用apiDoc实现python接口文档编写
Nov 19 #Python
wxPython绘图模块wxPyPlot实现数据可视化
Nov 19 #Python
Python浮点数四舍五入问题的分析与解决方法
Nov 19 #Python
python 上下文管理器及自定义原理解析
Nov 19 #Python
浅析python中while循环和for循环
Nov 19 #Python
django实现web接口 python3模拟Post请求方式
Nov 19 #Python
wxPython+Matplotlib绘制折线图表
Nov 19 #Python
You might like
生成卡号php代码
2008/04/09 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
2015/01/07 PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
2020/02/06 PHP
javascript文本框内输入文字倒计数的方法
2015/02/24 Javascript
分享经典的JavaScript开发技巧
2015/11/21 Javascript
JavaScript获取css行间样式,内连样式和外链样式的简单方法
2016/07/18 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
2016/09/13 Javascript
js判断价格,必须为数字且不能为负数的实现方法
2016/10/07 Javascript
bootstrap中使用google prettify让代码高亮的方法
2016/10/21 Javascript
Bootstrap jquery.twbsPagination.js动态页码分页实例代码
2017/02/20 Javascript
vue2 中如何实现动态表单增删改查实例
2017/06/09 Javascript
nuxt.js中间件实现拦截权限判断的方法
2018/11/21 Javascript
解决vue 界面在苹果手机上滑动点击事件等卡顿问题
2018/11/27 Javascript
Vue 进阶之路(三)
2019/04/18 Javascript
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
横向对比分析Python解析XML的四种方式
2016/03/30 Python
Python文件与文件夹常见基本操作总结
2016/09/19 Python
python的scikit-learn将特征转成one-hot特征的方法
2018/07/10 Python
Python实现拷贝/删除文件夹的方法详解
2018/08/29 Python
python贪吃蛇游戏代码
2020/04/18 Python
10招!看骨灰级Pythoner玩转Python的方法
2019/04/15 Python
Python安装selenium包详细过程
2019/07/23 Python
详解pycharm连接不上mysql数据库的解决办法
2020/01/10 Python
基于python3实现倒叙字符串
2020/02/18 Python
Python restful框架接口开发实现
2020/04/13 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
伦敦一家非常流行的时尚精品店:Oxygen Boutique
2017/01/15 全球购物
实习自荐信
2013/10/13 职场文书
股东合作协议书
2014/04/14 职场文书
酒店员工培训方案
2014/06/02 职场文书
英语系毕业生求职信
2014/07/13 职场文书
2015年春节标语口号
2014/12/09 职场文书
认真学习保证书
2015/02/26 职场文书
结婚主持人致辞
2015/07/28 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
Golang之sync.Pool使用详解
2021/05/06 Golang