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程序的执行原理
Apr 11 Python
Python中输出ASCII大文字、艺术字、字符字小技巧
Apr 28 Python
Python使用 Beanstalkd 做异步任务处理的方法
Apr 24 Python
Python爬虫之正则表达式的使用教程详解
Oct 25 Python
Linux 修改Python命令的方法示例
Dec 03 Python
python自动化之Ansible的安装教程
Jun 13 Python
Pycharm简单使用教程(入门小结)
Jul 04 Python
python利用JMeter测试Tornado的多线程
Jan 12 Python
Keras 加载已经训练好的模型进行预测操作
Jun 17 Python
如何基于Python爬取隐秘的角落评论
Jul 02 Python
Python爬虫之Selenium下拉框处理的实现
Dec 04 Python
python中_del_还原数据的方法
Dec 09 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
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
2010/03/23 Javascript
拖动table标题实现改变td的大小(css+js代码)
2013/04/16 Javascript
jquery js 获取时间差、时间格式具体代码
2013/06/05 Javascript
jQuery ajax dataType值为text json探索分享
2013/09/23 Javascript
javascript检测是否联网的实现代码
2014/09/28 Javascript
js与jquery实时监听输入框值的oninput与onpropertychange方法
2015/02/05 Javascript
AngularJs Scope详解及示例代码
2016/09/01 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
react-router实现跳转传值的方法示例
2017/05/27 Javascript
详解利用jsx写vue组件的方法示例
2017/07/17 Javascript
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
2018/08/28 Javascript
在vue中使用express-mock搭建mock服务的方法
2018/11/07 Javascript
如何制作一个Node命令行图像识别工具
2018/12/12 Javascript
微信小程序 简易计算器实现代码实例
2019/09/02 Javascript
vue如何使用async、await实现同步请求
2019/12/09 Javascript
JS轮播图的实现方法2
2020/08/25 Javascript
js实现炫酷光感效果
2020/09/05 Javascript
vue制作toast组件npm包示例代码
2020/10/29 Javascript
django 创建过滤器的实例详解
2017/08/14 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
2019/08/18 Python
Python动态导入模块和反射机制详解
2020/02/18 Python
pyecharts调整图例与各板块的位置间距实例
2020/05/16 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
2021/03/02 Python
SmartBuyGlasses丹麦:网上购买名牌太阳镜、眼镜和隐形眼镜
2016/10/01 全球购物
国外平面设计第一市场:99designs
2016/10/25 全球购物
三星俄罗斯授权在线商店:Samsung俄罗斯
2019/09/28 全球购物
毕业生自荐信如何写
2014/03/24 职场文书
体育节口号
2014/06/19 职场文书
法人委托书范本
2014/09/15 职场文书
停车场管理协议书范本
2014/10/08 职场文书
党员带头倡议书
2015/04/29 职场文书
2015年国庆节新闻稿
2015/07/18 职场文书
2015大学党建带团建工作总结
2015/07/23 职场文书
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫