Python性能分析利器pyinstrument讲解
一、前言
程序的性能也是非常关键的指标,很多时候你的代码跑的快,更能够体现你的技术。最近发现很多小伙伴在性能分析的过程中都是手动打印运行时间的方式来统计代码耗时的:
import datetime
start=datetime.datetime.now()
b=[i for i in range(10000000)] # 生成长度为一千万的列表
end=datetime.datetime.now()
print(end-start)
输出结果
0:00:00.377766
这种方法使用很快捷,但需要统计每行代码的执行时间,生成可视化的报告等更完善的性能分析时就有点力不从心了。这个时候可以使用python的第三方库Pyinstrument
来进行性能分析。
文章目录
- 一、前言
- 二、Pyinstrument使用
- 1. 举例
- 2. Pyinstrument分析django代码
- 三、Pyinstrument与cProfile(python自带性能分析器)的不同
二、Pyinstrument使用
Pyinstrument 是一个 Python 分析器。分析器是一种帮助您优化代码的工具 - 使其更快。要获得最大的速度提升。
Pyinstrument 官方文档:pyinstrument
Pyinstrument 安装:
pip install pyinstrument
1. 举例
对于最开始我们举的例子,使用Pyinstrument实现的代码如下:
文末添加个人VX,获取资料和免费答疑from pyinstrument import Profiler
profiler=Profiler()
profiler.start()
b=[i for i in range(10000000)]# 生成长度为一千万的列表
profiler.stop()
profiler.print()
输出结果
_ ._ __/__ _ _ _ _ _/_ Recorded: 10:39:54 Samples: 1/_//_/// /_\ / //_// / //_'/ // Duration: 0.385 CPU time: 0.391
/ _/ v4.1.1Program: D:/code/server/aitestdemo/test2.py0.385 <module> test2.py:2 #执行总耗时
└─ 0.385 <listcomp> test2.py:7 #单行代码耗时
打印的信息包含了记录时间、线程数、总耗时、单行代码耗时、CPU执行时间等信息。
在多行代码分析的情况下的使用效果(分别统计生成一千万长度、一亿长度、两亿长度的列表耗时):
from pyinstrument import Profilerprofiler = Profiler()
profiler.start()
a = [i for i in range(10000000)] # 生成长度为一千万的列表
b = [i for i in range(100000000)] # 生成长度为一亿的列表
c = [i for i in range(200000000)] # 生成长度为十亿的列表
profiler.stop()
profiler.print()
输出结果
Program: D:/code/server/aitestdemo/test2.py16.686 <module> test2.py:1
├─ 12.178 <listcomp> test2.py:9
├─ 4.147 <listcomp> test2.py:8
└─ 0.358 <listcomp> test2.py:7
2. Pyinstrument分析django代码
使用Pyinstrument分析 Django 代码非常简单,只需要在 Django 的配置文件settings.py
的 MIDDLEWARE
中添加如下配置:
MIDDLEWARE = [...'pyinstrument.middleware.ProfilerMiddleware',...
]
然后就可以在 url 上加一个参数 profile 就可以:
Pyinstrument还支持flask、异步代码的性能分析,具体可以查看官方文档进行学习。
Pyinstrument也提供了丰富的api供我们使用,官网文档有详细的介绍:https://pyinstrument.readthedocs.io/en/latest/reference.html
三、Pyinstrument与cProfile(python自带性能分析器)的不同
根据官方文档的描述来看,Pyinstrument的系统开销会比cProfile 这类跟踪分析器小很多,cProfile由于大量调用探查器,可能会扭曲测试结果:
下方获取学习资料和免费答疑
Python性能分析利器pyinstrument讲解相关推荐
- Python性能分析优化及测试
Python性能分析优化及测试 写在前面 CPU分析工具 简单的time方法以及包装成的修饰器 timeit UNIX的time命令进行简单的计时 cProfile:分析每个函数运行花费的时间 lin ...
- python性能分析(一)——使用timeit给你的程序打个表吧
前言 我们可以通过查看程序核心算法的代码,得知核心算法的渐进上界或者下界,从而大概估计出程序在运行时的效率,但是这并不够直观,也不一定十分靠谱(在整体程序中仍有一些不可忽略的运行细节在估计时被忽略了) ...
- Python性能分析的学习笔记
1 介绍 在这篇文章中,我们将讲述一下关于python代码的性能分析- 2 资料收藏 Pyinstrument Pyinstrument是我在<涛哥聊python>中看到的一个性能分析工具 ...
- python性能分析工具
1)cProfile cProfile可以嵌入到python代码中执行,比如: import cProfile cProfile.run('foo()', 'foo.out') 查看结果需要pstat ...
- python性能分析工具模块_python——关于Python Profilers性能分析器
1. 介绍性能分析器 profiler是一个程序,用来描述运行时的程序性能,并且从不同方面提供统计数据加以表述.Python中含有3个模块提供这样的功能,分别是cProfile, profile和ps ...
- mysql show profile详解_SQL 性能分析利器 show profile
本文首发个人公众号<andyqian>, 期待你的关注- 前言 在之前的文章中,我们提到过一些慢SQL优化的步骤.其中就包括:使用 explain 关键字来查看执行计划,是否命中索引. 通 ...
- Python 性能分析入门指南
为什么80%的码农都做不了架构师?>>> 在岭南六少博客找到的好东西. 注: 本文的原作者是 Huy Nguyen ,原文地址为 A guide to analyzing Py ...
- Python性能分析入门——cProfile、可视化、逐行分析、内存分析
文章目录 简介 cProfile PyCharm 可视化 安装 gprof2dot SnakeViz PyCallGraph 逐行分析 内存分析 内存堆分析 其他 遇到的坑 参考文献 简介 通过性能分 ...
- python性能分析与优化
性能分析: 1.种类: 基于事件的性能分析通过收集程序执行过程中的具体事件进行工作,每个调用都会触发,输出数据量大,精度高def profiler(frame, event, arg):print ' ...
最新文章
- 日读论文100+,AI都替代不了!辞去医药研发总监后,她成为了一名全职学术警察...
- 使用Jenkins部署.Net Core遇到的几个坑
- linux操作系统中文件系统管理--实训
- android代码zip怎么用,Rxjava Android如何使用Zip操作符
- python实例31[自动挂载虚拟盘]
- 线性表插入元素算法(顺序存储)
- php 中的关联数组 介绍
- 苏三30篇原创高质量文章汇总
- pytorch中的tensor以numpy形式进行输出保存
- 数据资产管理及数据管控体系建设思路
- 帧同步(LockStep)该如何反外挂 及 优化
- (总结归纳)常用电子元件,封装,库
- 大学计算机技巧讲座新闻稿,计算机科学与技术名家讲座系列报道(王希胤)
- MATLAB符号积分范例
- 个人博客处理——页面处理
- java 输出水仙花数
- Web大学生网页作业成品——仿腾讯游戏官网网站设计与实现(HTML+CSS+JavaScript)
- 杰夫•贝索斯:抵抗天赋的诱惑
- 基于“把点开活”的面试理论
- 使用原始套接字Raw Socket实现数据包嗅探