python性能测量工具cProfile使用解析


Posted in Python onSeptember 26, 2019

背景:

Python是一种解释性的语言,执行速度相比C、C++等语言十分缓慢;因此我们需要在其它地方上下功夫来提高代码的执行速度。

首先需要对代码进行分析,这个时候则需要用一些工具。

这里介绍cProfile:

全代码分析:

命令行:

cProfile -s tottime your_program.py

结果如下:

ncalls tottime percall cumtime percall filename:lineno(function)
  66  0.001  0.000  11.850  0.180 base.py:228(micro_service)
  66  0.003  0.000  11.849  0.180 tools.py:557(micro_service)
 1056  0.001  0.000  11.073  0.010 connection.py:463(drain_events)
 1056  0.015  0.000  11.072  0.010 connection.py:466(blocking_read)
 1056  0.008  0.000  10.920  0.010 transport.py:233(read_frame)
 3168  0.014  0.000  10.908  0.003 transport.py:370(_read)
 3168  10.892  0.003  10.892  0.003 {method 'recv' of '_socket.socket' objects}
  66  0.001  0.000  9.814  0.149 rpc.py:350(__call__)
  66  0.001  0.000  8.395  0.127 rpc.py:329(result)

块分析:

上面属于文件分析,但是我们可能只对部分代码感兴趣,那么只需要在这部分代码的前后加上下面这两段代码即可:

import cProfile
cp = cProfile.Profile()
cp.enable()
YOUR CODE
cp.disable()
cp.print_stats()

结果与全代码分析的类似,但是只包含你感兴趣的部分。

行分析:

行分析需要安装line_profiler:

pip install line_profiler
@profile
def class_name()
	pass

然后在命令行输入:

kernprof -l -v your_code.py
-l 逐行分析
-v 立即查看结果

示例:

from cProfile import Profile as profile 
from pstats import Stats 
def (): 
	p = profile() 
	p.snapshot_stats() 
	p.enable() 
	
	p.disable() 
	p.print_stats(2) # 按照调用累加总耗时累加排序,即将最耗时的函数最优先
	p.dump_stats("call.log")

关于profile和cProfile的更多链接,请点击:

https://docs.python.org/3/library/profile.html?spm=5176.100239.0.0.qa5fU5

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
35个Python编程小技巧
Apr 01 Python
pycharm重置设置,恢复默认设置的方法
Oct 22 Python
使用Python中的reduce()函数求积的实例
Jun 28 Python
如何使用python把ppt转换成pdf
Jun 29 Python
python实现ip代理池功能示例
Jul 05 Python
python如何保证输入键入数字的方法
Aug 23 Python
Python多继承以及MRO顺序的使用
Nov 11 Python
python 利用已有Ner模型进行数据清洗合并代码
Dec 24 Python
python基于property()函数定义属性
Jan 22 Python
Virtualenv 搭建 Py项目运行环境的教程详解
Jun 22 Python
Python turtle库的画笔控制说明
Jun 28 Python
Python识别验证码的实现示例
Sep 30 Python
python使用socket 先读取长度,在读取报文内容示例
Sep 26 #Python
用python写测试数据文件过程解析
Sep 25 #Python
Python使用grequests(gevent+requests)并发发送请求过程解析
Sep 25 #Python
给大家整理了19个pythonic的编程习惯(小结)
Sep 25 #Python
Python 图像对比度增强的几种方法(小结)
Sep 25 #Python
pyqt5、qtdesigner安装和环境设置教程
Sep 25 #Python
python super的使用方法及实例详解
Sep 25 #Python
You might like
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
2011/11/10 PHP
php删除数组元素示例分享
2014/02/17 PHP
php检测apache mod_rewrite模块是否安装的方法
2015/03/14 PHP
PHP测试成功的邮件发送案例
2015/10/26 PHP
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
Angularjs全局变量被作用域监听的正确姿势
2016/02/06 Javascript
Bootstrap每天必学之折叠
2016/04/12 Javascript
vuejs通过filterBy、orderBy实现搜索筛选、降序排序数据
2020/10/26 Javascript
JavaScript数据结构之数组的表示方法示例
2017/04/12 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
vue组件实现文字居中对齐的方法
2017/08/23 Javascript
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
vue-router 实现导航守卫(路由卫士)的实例代码
2018/09/02 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
vue 在单页面应用里使用二级套嵌路由
2020/12/19 Vue.js
[47:53]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#2COL VS Spirit
2016/03/02 DOTA
[51:44]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第二场
2018/04/04 DOTA
使用Python开发windows GUI程序入门实例
2014/10/23 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
python实现生成字符串大小写字母和数字的各种组合
2019/01/01 Python
Flask框架工厂函数用法实例分析
2019/05/25 Python
Python线程指南分享
2019/11/19 Python
俄罗斯奢侈品牌衣服、鞋子和配饰的在线商店:INTERMODA
2020/07/17 全球购物
介绍一下SQL注入攻击的种类和防范手段
2012/02/18 面试题
Linux上比较文件的命令都有哪些
2012/02/24 面试题
毕业求职自荐信格式是什么
2013/11/19 职场文书
优秀社区干部事迹材料
2014/02/03 职场文书
药品营销策划方案
2014/06/15 职场文书
论群众路线学习笔记
2014/11/06 职场文书
利用Selenium添加cookie实现自动登录的示例代码(fofa)
2021/05/08 Python
防止web项目中的SQL注入
2021/12/06 MySQL
IDEA 2022 Translation 未知错误 翻译文档失败
2022/04/24 Java/Android
Nginx报404错误的详细解决方法
2022/07/23 Servers