Python 性能分析利器 pyinstrument 讲解
一、前言
程序的性能也是非常关键的指标,很多时候你的代码跑的快,更能够体现你的技术。最近发现很多小伙伴在性能分析的过程中都是手动打印运行时间的方式来统计代码耗时的:
输出结果
这种方法使用很快捷,但需要统计每行代码的执行时间,生成可视化的报告等更完善的性能分析时就有点力不从心了。这个时候可以使用 python 的第三方库Pyinstrument
来进行性能分析
二、Pyinstrument 使用
Pyinstrument 是一个 Python 分析器。分析器是一种帮助您优化代码的工具 - 使其更快。要获得最大的速度提升。Pyinstrument 官方文档:pyinstrument
Pyinstrument 安装:
pip install pyinstrument
1. 举例
对于最开始我们举的例子,使用 Pyinstrument 实现的代码如下:
输出结果
打印的信息包含了记录时间、线程数、总耗时、单行代码耗时、CPU 执行时间等信息。
在多行代码分析的情况下的使用效果(分别统计生成一千万长度、一亿长度、两亿长度的列表耗时):
输出结果
2. Pyinstrument 分析 django 代码
使用 Pyinstrument 分析 Django 代码非常简单,只需要在 Django 的配置文件settings.py
的 MIDDLEWARE
中添加如下配置:
然后就可以在 url 上加一个参数 profile 就可以:
![](https://static001.geekbang.org/infoq/69/69c9f2c323b7a3f0dea11bf2bc4f62ed.png)
Pyinstrument 还支持 flask、异步代码的性能分析,具体可以查看官方文档进行学习。Pyinstrument 也提供了丰富的 api 供我们使用,官网文档有详细的介绍:https://pyinstrument.readthedocs.io/en/latest/reference.html
三、Pyinstrument 与 cProfile(python 自带性能分析器)的不同
根据官方文档的描述来看,Pyinstrument 的系统开销会比 cProfile 这类跟踪分析器小很多,cProfile 由于大量调用探查器,可能会扭曲测试结果:
![](https://static001.geekbang.org/infoq/8c/8c64eb104e762b9dd3834fc224678108.png)
版权声明: 本文为 InfoQ 作者【曲鸟】的原创文章。
原文链接:【http://xie.infoq.cn/article/5b4533a59b0bf5554a1fbfff7】。文章转载请联系作者。
评论