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 Web服务器Tornado使用小结
May 06 Python
Python入门及进阶笔记 Python 内置函数小结
Aug 09 Python
Python实现远程调用MetaSploit的方法
Aug 22 Python
python定时执行指定函数的方法
May 27 Python
详解设计模式中的工厂方法模式在Python程序中的运用
Mar 02 Python
利用Python实现Windows定时关机功能
Mar 21 Python
浅谈python可视化包Bokeh
Feb 07 Python
python 集合 并集、交集 Series list set 转换的实例
May 29 Python
详解Python爬取并下载《电影天堂》3千多部电影
Apr 26 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
Nov 15 Python
详解Python模块化编程与装饰器
Jan 16 Python
opencv检测动态物体的实现
Jul 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 采集心得技巧
2009/05/15 PHP
PHP输出时间差函数代码
2013/01/28 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
浅析php学习的路线图
2013/07/10 PHP
php递归json类实例
2014/12/02 PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
2017/03/13 PHP
PHP的PDO事务与自动提交
2019/01/24 PHP
破解Session cookie的方法
2006/07/28 Javascript
jquery创建一个ajax关键词数据搜索实现思路
2013/02/26 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
jQuery中.live()方法的用法深入解析
2013/12/30 Javascript
JS 全屏和退出全屏详解及实例代码
2016/11/07 Javascript
Javascript DOM事件操作小结(监听鼠标点击、释放,悬停、离开等)
2017/01/20 Javascript
原生js实现轮播图
2017/02/27 Javascript
vue模板语法-插值详解
2017/03/06 Javascript
详解angular笔记路由之angular-router
2017/09/12 Javascript
vue 监听屏幕高度的实例
2018/09/05 Javascript
Vue中使用方法、计算属性或观察者的方法实例详解
2018/10/31 Javascript
谈谈为什么你的 JavaScript 代码如此冗长
2019/01/30 Javascript
JS代码触发事件代码实例
2020/01/02 Javascript
vue style width a href动态拼接问题的解决
2020/08/07 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
2020/12/07 Javascript
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
2015/08/10 Python
TensorFlow saver指定变量的存取
2018/03/10 Python
python线程定时器Timer实现原理解析
2019/11/30 Python
Python多重继承之菱形继承的实例详解
2020/02/12 Python
python批量修改xml属性的实现方式
2020/03/05 Python
Python基于DB-API操作MySQL数据库过程解析
2020/04/23 Python
Django celery异步任务实现代码示例
2020/11/26 Python
CSS3 毛玻璃效果
2019/08/14 HTML / CSS
总监职责范文
2013/11/09 职场文书
团支书竞选演讲稿
2014/04/28 职场文书
蜗居观后感
2015/06/11 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
2021/05/24 Python
Python读取和写入Excel数据
2022/04/20 Python