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 相关文章推荐
python模拟enum枚举类型的方法小结
Apr 30 Python
Python中用于计算对数的log()方法
May 15 Python
Python多进程分块读取超大文件的方法
Apr 13 Python
基于python进行桶排序与基数排序的总结
May 29 Python
对matplotlib改变colorbar位置和方向的方法详解
Dec 13 Python
使用Python实现图像标记点的坐标输出功能
Aug 14 Python
python网络爬虫 CrawlSpider使用详解
Sep 27 Python
Python hashlib模块加密过程解析
Nov 05 Python
python pyenv多版本管理工具的使用
Dec 23 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
Apr 20 Python
Python使用多进程运行含有任意个参数的函数
May 02 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
Nov 28 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面向对象
2012/02/22 PHP
php使用sql数据库 获取字段问题介绍
2013/08/12 PHP
PHP实现删除非站内外部链接实例代码
2014/06/17 PHP
PHP中的流(streams)浅析
2015/07/02 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
PHP闭包定义与使用简单示例
2018/04/13 PHP
PHP开发API接口签名生成及验证操作示例
2020/05/27 PHP
jQuery实现流动虚线框的方法
2015/01/29 Javascript
简介AngularJS的视图功能应用
2015/06/17 Javascript
jQuery获取及设置表单input各种类型值的方法小结
2016/05/24 Javascript
bootstrap table实现单击单元格可编辑功能
2017/03/28 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
layui原生表单验证的实例
2019/09/09 Javascript
Vuex,iView UI面包屑导航使用扩展详解
2019/11/04 Javascript
Nest.js环境变量配置与序列化详解
2021/02/21 Javascript
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
tensorflow建立一个简单的神经网络的方法
2018/02/10 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
2018/02/13 Python
pandas 小数位数 精度的处理方法
2018/06/09 Python
在pycharm中使用git版本管理以及同步github的方法
2019/01/16 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
django使用admin站点上传图片的实例
2019/07/28 Python
Matplotlib使用字符串代替变量绘制散点图的方法
2020/02/17 Python
神经网络训练采用gpu设置的方式
2021/03/03 Python
纯CSS3实现表单验证效果(非常不错)
2017/01/18 HTML / CSS
舞会礼服和舞会鞋:PromGirl
2019/04/22 全球购物
物业管理毕业生个人的求职信
2013/11/30 职场文书
士力架广告词
2014/03/20 职场文书
优秀团员自我评价范文
2014/04/23 职场文书
煤矿安全演讲稿
2014/05/09 职场文书
美国旅游签证工作证明
2014/10/14 职场文书
教师节表彰会主持词
2015/07/06 职场文书
2016春季幼儿园大班开学寄语
2015/12/03 职场文书
2016年春季趣味运动会开幕词
2016/03/04 职场文书
Go语言操作数据库及其常规操作的示例代码
2021/04/21 Golang