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里隐藏的“禅”
Jun 16 Python
跟老齐学Python之dict()的操作方法
Sep 24 Python
Python比较两个图片相似度的方法
Mar 13 Python
Python使用urllib2模块实现断点续传下载的方法
Jun 17 Python
python嵌套函数使用外部函数变量的方法(Python2和Python3)
Jan 31 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
Nov 30 Python
python写一个md5解密器示例
Feb 23 Python
Python Matplotlib库安装与基本作图示例
Jan 09 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
Jun 26 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
Aug 07 Python
Python3之字节串bytes与字节数组bytearray的使用详解
Aug 27 Python
Django静态资源部署404问题解决方案
May 11 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
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
《OVERLORD》手游英文版即将上线 手机上也能扮演骨王
2020/04/09 日漫
基于PHP+MySQL的聊天室设计
2006/10/09 PHP
php jq jquery getJSON跨域提交数据完整版
2013/09/13 PHP
PHP+jquery+ajax实现即时聊天功能实例
2014/12/23 PHP
PHP封装返回Ajax字符串和JSON数组的方法
2017/02/17 PHP
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
几个比较经典常用的jQuery小技巧
2010/03/01 Javascript
SyntaxHighlighter语法高亮插件使用说明
2011/08/14 Javascript
关于URL中的特殊符号使用介绍
2011/11/03 Javascript
Web Inspector:关于在 Sublime Text 中调试Js的介绍
2013/04/18 Javascript
js 浏览本地文件夹系统示例代码
2013/10/24 Javascript
JavaScript数据类型详解
2015/04/01 Javascript
引用jquery框架后出错的解决方法
2016/08/09 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
2017/01/08 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
微信小程序radio组件使用详解
2018/01/31 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
JS实现压缩上传图片base64长度功能
2019/12/03 Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
2020/07/24 Javascript
Vue 实现一个简单的鼠标拖拽滚动效果插件
2020/12/10 Vue.js
[57:37]EG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
一个基于flask的web应用诞生 组织结构调整(7)
2017/04/11 Python
利用python批量给云主机配置安全组的方法教程
2017/06/21 Python
浅析Python函数式编程
2018/10/06 Python
Python实战之制作天气查询软件
2019/05/14 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
2019/05/23 Python
详解python实现数据归一化处理的方式:(0,1)标准化
2019/07/17 Python
NumPy排序的实现
2020/01/21 Python
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
绿色环保标语
2014/06/12 职场文书
搞笑车尾标语
2014/06/23 职场文书
2014年妇联工作总结
2014/11/21 职场文书