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类的多重继承问题深入分析
Nov 09 Python
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
Oct 18 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
Jan 20 Python
基于python3 OpenCV3实现静态图片人脸识别
May 25 Python
Python实现的建造者模式示例
Aug 06 Python
Python遍历文件夹 处理json文件的方法
Jan 22 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
Aug 20 Python
Python queue队列原理与应用案例分析
Sep 27 Python
Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析
Dec 26 Python
简单了解python调用其他脚本方法实例
Mar 26 Python
python实现对变位词的判断方法
Apr 05 Python
Keras:Unet网络实现多类语义分割方式
Jun 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
PHP高级OOP技术演示
2009/08/27 PHP
php工具型代码之印章抠图
2018/07/18 PHP
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
Javascript this指针
2009/07/30 Javascript
JavaScript Event学习第九章 鼠标事件
2010/02/08 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
JavaScript之自定义类型
2012/05/04 Javascript
JQuery给元素添加/删除节点比如select
2013/04/02 Javascript
JavaScript获取FCK编辑器信息的具体方法
2013/07/12 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
JavaScript用select实现日期控件
2015/07/17 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
全面解析多种Bootstrap图片轮播效果
2016/05/27 Javascript
微信QQ的二维码登录原理js代码解析
2016/06/23 Javascript
jquery结合html实现中英文页面切换
2016/11/29 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
2017/01/19 Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
2017/06/21 Javascript
Angular2之二级路由详解
2018/08/31 Javascript
Element-ui tree组件自定义节点使用方法代码详解
2018/09/17 Javascript
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
Nuxt v-bind绑定img src不显示的解决
2019/12/05 Javascript
Python实现字典去除重复的方法示例
2017/07/31 Python
python 一个figure上显示多个图像的实例
2019/07/08 Python
python中dict使用方法详解
2019/07/17 Python
Python语言异常处理测试过程解析
2020/01/08 Python
对python pandas中 inplace 参数的理解
2020/06/27 Python
Django celery异步任务实现代码示例
2020/11/26 Python
纯CSS3实现圆圈动态发光特效动画的示例代码
2021/03/08 HTML / CSS
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
CHRONEXT英国:您的首选奢华腕表目的地
2020/03/30 全球购物
高一学年自我鉴定范文(3篇)
2014/09/26 职场文书
自查自纠工作总结
2014/10/15 职场文书
2016关于预防职务犯罪的心得体会
2016/01/21 职场文书
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
2021/11/11 Python