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将mdb数据库文件导入postgresql数据库示例
Feb 17 Python
python统计一个文本中重复行数的方法
Nov 19 Python
Python调用命令行进度条的方法
May 05 Python
python实现下载整个ftp目录的方法
Jan 17 Python
python求解数组中两个字符串的最小距离
Sep 27 Python
使用Python+wxpy 找出微信里把你删除的好友实例
Feb 21 Python
python selenium 弹出框处理的实现
Feb 26 Python
在Pandas中处理NaN值的方法
Jun 25 Python
Python中import导入不同目录的模块方法详解
Feb 18 Python
Django框架获取form表单数据方式总结
Apr 22 Python
基于SpringBoot构造器注入循环依赖及解决方式
Apr 26 Python
python和node.js生成当前时间戳的示例
Sep 29 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批量去除BOM头内容信息代码
2016/03/11 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
2017/03/14 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
2019/05/08 PHP
DWR Ext 加载数据
2009/03/22 Javascript
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
2012/02/10 Javascript
分析js闭包引起的事件注册问题
2016/03/29 Javascript
AngularJS基础 ng-paste 指令简单示例
2016/08/02 Javascript
可输入文字查找ajax下拉框控件 ComBox的实现方法
2016/10/25 Javascript
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
React 组件间的通信示例
2018/06/14 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
JS实现简单的表格增删
2020/01/16 Javascript
[01:10]DOTA2次级职业联赛 - EP战队宣传片
2014/12/01 DOTA
[41:52]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第二场 2月22日
2021/03/11 DOTA
python运行时间的几种方法
2016/06/17 Python
Python中datetime模块参考手册
2017/01/13 Python
python操作MySQL 模拟简单银行转账操作
2017/09/27 Python
python操作mysql代码总结
2018/06/01 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
python内置数据类型之列表操作
2018/11/12 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
2020/06/04 Python
用python实现名片管理系统
2020/06/18 Python
python 图像插值 最近邻、双线性、双三次实例
2020/07/05 Python
详解如何在css3打包后自动追加前缀插件:autoprefixer
2018/12/18 HTML / CSS
用canvas显示验证码的实现
2020/04/10 HTML / CSS
init进程的作用
2015/08/20 面试题
初一家长会邀请函
2014/01/31 职场文书
外贸采购员岗位职责
2014/03/08 职场文书
锦旗标语大全
2014/06/23 职场文书
学院党委班子四风问题自查报告及整改措施
2014/10/25 职场文书
2015试用期转正工作总结
2014/12/12 职场文书
投标单位介绍信
2015/05/05 职场文书
战马观后感
2015/06/08 职场文书
python实现自动化群控的步骤
2021/04/11 Python
教你怎么用PyCharm为同一服务器配置多个python解释器
2021/05/31 Python