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自动zip压缩目录的方法
Jun 28 Python
Python3 适合初学者学习的银行账户登录系统实例
Aug 08 Python
Python读取图片为16进制表示简单代码
Jan 19 Python
Python实现获取邮箱内容并解析的方法示例
Jun 16 Python
基于python实现聊天室程序
Jul 27 Python
使用Pandas将inf, nan转化成特定的值
Dec 19 Python
Python实现Wordcloud生成词云图的示例
Mar 30 Python
利用matplotlib为图片上添加触发事件进行交互
Apr 23 Python
python程序如何进行保存
Jul 03 Python
python 密码学示例——理解哈希(Hash)算法
Sep 21 Python
python 制作一个gui界面的翻译工具
May 14 Python
python调用ffmpeg命令行工具便捷操作视频示例实现过程
Nov 01 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
Win9x/ME下Apache+PHP安装配置
2006/10/09 PHP
遍历指定目录下的所有目录和文件的php代码
2011/11/27 PHP
深入理解php的MySQL连接类
2013/06/07 PHP
php读取文件内容的三种可行方法示例介绍
2014/02/08 PHP
神盾加密解密教程(三)PHP 神盾解密工具
2014/06/08 PHP
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
PHP贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
php json_encode与json_decode详解及实例
2016/12/13 PHP
jquery简单实现鼠标经过导航条改变背景图
2013/12/17 Javascript
js实现的复制兼容chrome和IE
2014/04/03 Javascript
AngularJS实现按钮提示与点击变色效果
2016/09/07 Javascript
jQuery实现手机版页面翻页效果的简单实例
2016/10/05 Javascript
js以及jquery实现手风琴效果
2020/04/17 Javascript
微信小程序的生命周期的详解
2017/10/19 Javascript
angularJS的radio实现单项二选一的使用方法
2018/02/28 Javascript
vue+webpack实现异步加载三种用法示例详解
2018/04/24 Javascript
实用的Vue开发技巧
2019/05/30 Javascript
解决Vue-cli无法编译es6的问题
2020/10/30 Javascript
详解JavaScript中分解数字的三种方法
2021/01/05 Javascript
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
把MySQL表结构映射为Python中的对象的教程
2015/04/07 Python
Python批量转换文件编码格式
2015/05/17 Python
Python整型运算之布尔型、标准整型、长整型操作示例
2017/07/21 Python
如何用python整理附件
2018/05/13 Python
解决python中画图时x,y轴名称出现中文乱码的问题
2019/01/29 Python
pyqt远程批量执行Linux命令程序的方法
2019/02/14 Python
详解python的四种内置数据结构
2019/03/19 Python
python模拟键盘输入 切换键盘布局过程解析
2019/08/15 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
根据tensor的名字获取变量的值方式
2020/01/04 Python
Python 字典中的所有方法及用法
2020/06/10 Python
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
2015年三年级班主任工作总结
2015/05/21 职场文书
2015中秋节晚会主持词
2015/07/01 职场文书
温馨祝福晨语:美丽的一天从我的问候开始
2019/11/28 职场文书
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA