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中apply函数的用法实例教程
Jul 31 Python
Python基于PycURL实现POST的方法
Jul 25 Python
python+selenium开发环境搭建图文教程
Aug 11 Python
详解django的serializer序列化model几种方法
Oct 16 Python
Python 获取中文字拼音首个字母的方法
Nov 28 Python
Python实现繁?转为简体的方法示例
Dec 18 Python
pymongo中group by的操作方法教程
Mar 22 Python
图解python全局变量与局部变量相关知识
Nov 02 Python
解决Jupyter notebook中.py与.ipynb文件的import问题
Apr 21 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
May 25 Python
推荐值得学习的12款python-web开发框架
Aug 10 Python
利用Python如何画一颗心、小人发射爱心
Feb 21 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获取url字符串截取路径的文件名和扩展名的函数
2010/01/22 PHP
smarty中英文多编码字符截取乱码问题解决方法
2014/10/28 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
2015/01/04 PHP
php数组和链表的区别总结
2019/09/20 PHP
JavaScript对象模型-执行模型
2008/04/28 Javascript
鼠标经过的文本框textbox变色
2009/05/21 Javascript
Jquery数独游戏解析(一)-页面布局
2010/11/05 Javascript
js判断是否为ie的方法小结
2014/01/13 Javascript
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
node网页分段渲染详解
2016/09/05 Javascript
jQuery插件ajaxFileUpload异步上传文件
2016/10/19 Javascript
bootstrap table复杂操作代码
2016/11/01 Javascript
js获取css的各种样式并且设置他们的方法
2017/08/22 Javascript
JS实现的按钮点击颜色切换功能示例
2017/10/19 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
2020/04/12 Javascript
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
Vue下拉框回显并默认选中随机问题
2018/09/06 Javascript
js取小数点后两位四种方法
2019/01/18 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
2019/04/11 Javascript
[11:42]2018DOTA2国际邀请赛寻真——OG卷土重来
2018/08/17 DOTA
Python使用filetype精确判断文件类型
2017/07/02 Python
Python实现判断并移除列表指定位置元素的方法
2018/04/13 Python
对python GUI实现完美进度条的示例详解
2018/12/13 Python
Python提取PDF内容的方法(文本、图像、线条等)
2019/09/25 Python
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
黄色火烈鸟:De Gele Flamingo
2019/03/18 全球购物
三维科技面试题
2013/07/27 面试题
个人简历中的自我评价怎么写
2014/01/26 职场文书
企业授权委托书范本
2014/04/02 职场文书
化工操作工岗位职责
2014/04/29 职场文书
村干部培训方案
2014/05/02 职场文书
丧事答谢词
2015/01/05 职场文书
比赛主持人开场白
2015/05/29 职场文书
Js类的构建与继承案例详解
2021/09/15 Javascript
win11高清晰音频管理器在哪里?win11找不到高清晰音频管理器解决办法
2022/04/08 数码科技