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中生成器和yield语句的用法详解
Apr 17 Python
python检查字符串是否是正确ISBN的方法
Jul 11 Python
用Python设计一个经典小游戏
May 15 Python
Python matplotlib绘图可视化知识点整理(小结)
Mar 16 Python
Python实现的调用C语言函数功能简单实例
Mar 13 Python
Python函数中的可变长参数详解
Sep 12 Python
python多继承(钻石继承)问题和解决方法简单示例
Oct 21 Python
python3中rank函数的用法
Nov 27 Python
python 读取更新中的log 或其它文本方式
Dec 24 Python
django ajax发送post请求的两种方法
Jan 05 Python
在python中实现求输出1-3+5-7+9-......101的和
Apr 02 Python
大数据分析用java还是Python
Jul 06 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
Session的工作方式
2006/10/09 PHP
在普通HTTP上安全地传输密码
2007/07/21 PHP
简单的PHP图片上传程序
2008/03/27 PHP
php str_pad 函数使用详解
2009/01/13 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
2016/05/12 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
2019/07/06 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
2019/10/11 PHP
关于实现代码语法标亮 dp.SyntaxHighlighter
2007/02/02 Javascript
把html页面的部分内容保存成新的html文件的jquery代码
2009/11/12 Javascript
offsetParent 算法分析
2010/04/05 Javascript
javascript获取浏览器类型和版本的方法(js获取浏览器版本)
2014/03/13 Javascript
javascript二维数组转置实例
2015/01/22 Javascript
JS实现日期时间动态显示的方法
2015/12/07 Javascript
作为老司机使用 React 总结的 11 个经验教训
2017/04/08 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
2017/05/12 Javascript
js实现鼠标拖拽缩放div实例代码
2019/03/25 Javascript
JS实现拖拽元素时与另一元素碰撞检测
2020/08/27 Javascript
简单介绍Python中的try和finally和with方法
2015/05/05 Python
Python+Socket实现基于UDP协议的局域网广播功能示例
2017/08/31 Python
Python多线程原理与用法实例剖析
2019/01/22 Python
python Selenium实现付费音乐批量下载的实现方法
2019/01/24 Python
python中字符串的编码与解码详析
2020/12/03 Python
ghd澳大利亚官方网站:英国最受欢迎的美发工具品牌
2018/05/21 全球购物
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
Yahoo-PHP面试题2
2014/12/06 面试题
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
超市后勤自我鉴定
2014/01/17 职场文书
调查研究项目计划书
2014/04/29 职场文书
车辆转让协议书
2014/09/24 职场文书
党的群众路线教育实践活动自我剖析材料
2014/10/08 职场文书
机关作风建设自查报告及整改措施
2014/10/21 职场文书
2015年幼儿园中班开学寄语
2015/05/27 职场文书
Java线程的6种状态与生命周期
2022/05/11 Java/Android