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创建XML文档
Mar 01 Python
Python爬取网易云音乐热门评论
Mar 31 Python
基于Django的ModelForm组件(详解)
Dec 07 Python
python3结合openpyxl库实现excel操作的实例代码
Sep 11 Python
widows下安装pycurl并利用pycurl请求https地址的方法
Oct 15 Python
Python 处理文件的几种方式
Aug 23 Python
python关闭占用端口方式
Dec 17 Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
Mar 09 Python
pandas中ix的使用详细讲解
Mar 09 Python
解决运行出现'dict' object has no attribute 'has_key'问题
Jul 15 Python
Python通过zookeeper实现分布式服务代码解析
Jul 22 Python
python程序实现BTC(比特币)挖矿的完整代码
Jan 20 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
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
2016/10/08 PHP
PHP实现简单的模板引擎功能示例
2017/09/02 PHP
PHP7变量处理机制修改
2021/03/09 PHP
checkbox 复选框不能为空
2009/07/11 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
分享8款优秀的 jQuery 加载动画和进度条插件
2012/10/24 Javascript
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
JQuery结合CSS操作打印样式的方法
2013/12/24 Javascript
raphael.js绘制中国地图 地图绘制方法
2014/02/12 Javascript
Jquery常用的方法汇总
2015/09/01 Javascript
js如何准确获取当前页面url网址信息
2020/09/13 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
2017/01/04 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
JavaScript常用数学函数用法示例
2018/05/14 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
2018/08/07 Javascript
vue 项目地址去掉 #的方法
2018/10/20 Javascript
Jquery和CSS实现选择框重置按钮功能
2018/11/08 jQuery
nodejs 使用nodejs-websocket模块实现点对点实时通讯
2018/11/28 NodeJs
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
详解如何在JS代码中消灭for循环
2019/12/11 Javascript
基于element-ui封装表单金额输入框的方法示例
2021/01/06 Javascript
[04:22]DSPL第二期精彩集锦:残血反杀!
2014/12/10 DOTA
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
对python列表里的字典元素去重方法详解
2019/01/21 Python
Python日期时间Time模块实例详解
2019/04/15 Python
Django处理Ajax发送的Get请求代码详解
2019/07/29 Python
使用Python的turtle模块画国旗
2019/09/24 Python
Python celery原理及运行流程解析
2020/06/13 Python
详解Python中第三方库Faker
2020/09/25 Python
汽车运用工程系毕业生自荐信
2013/12/27 职场文书
保险内勤岗位职责
2014/04/05 职场文书
2014物价局民主生活会对照检查材料思想汇报
2014/09/24 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书