一、前言
程序的性能也是非常关键的指标,很多时候你的代码跑的快,更能够体现你的技术。最近发现很多小伙伴在性能分析的过程中都是手动打印运行时间的方式来统计代码耗时的:
importdatetimestart=datetime.datetime.now()b=[iforiinrange(10000000)]生成长度为一千万的列表end=datetime.datetime.now()print(end-start)
输出结果
0:00:00.377766
这种方法使用很快捷,但需要统计每行代码的执行时间,生成可视化的报告等更完善的性能分析时就有点力不从心了。这个时候可以使用python的第三方库Pyinstrument
来进行性能分析。
二、Pyinstrument使用
Pyinstrument 是一个 Python 分析器。分析器是一种帮助您优化代码的工具 – 使其更快。要获得最大的速度提升。 Pyinstrument 官方文档:pyinstrument
Pyinstrument 安装:
pip install pyinstrument
1. 举例
对于最开始我们举的例子,使用Pyinstrument实现的代码如下:
公众号:python砖家,回复:1,获取漫画python教程
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.1
Program: D:/code/server/aitestdemo/test2.py
0.385 test2.py:2 执行总耗时
└─ 0.385 test2.py:7 单行代码耗时
打印的信息包含了记录时间、线程数、总耗时、单行代码耗时、CPU执行时间等信息。
在多行代码分析的情况下的使用效果(分别统计生成一千万长度、一亿长度、两亿长度的列表耗时):
from pyinstrument import Profiler
profiler = 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.py
16.686 test2.py:1
├─ 12.178 test2.py:9
├─ 4.147 test2.py:8
└─ 0.358 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由于大量调用探查器,可能会扭曲测试结果:
往期推荐
声明:本文部分素材转载自互联网,如有侵权立即删除 。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
暂无评论内容