脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Python中性能分析利器pyinstrument详细讲解

Python中性能分析利器pyinstrument详细讲解

2022-09-12 11:43曲鸟 Python

大家好,本篇文章主要讲的是Python中性能分析利器pyinstrument详细讲解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下

一、前言

程序的性能也是非常关键的指标,很多时候你的代码跑的快,更能够体现你的技术。最近发现很多小伙伴在性能分析的过程中都是手动打印运行时间的方式来统计代码耗时的:

?
1
2
3
4
5
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使用

Pyinstrument 是一个 Python 分析器。分析器是一种帮助您优化代码的工具 - 使其更快。要获得最大的速度提升。
Pyinstrument 官方文档:pyinstrument

Pyinstrument 安装:

?
1
pip install pyinstrument

1. 举例

对于最开始我们举的例子,使用Pyinstrument实现的代码如下:

?
1
2
3
4
5
6
7
8
文末添加个人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.1
Program: D:/code/server/aitestdemo/test2.py
0.385 <module>  test2.py:2  #执行总耗时
└─ 0.385 <listcomp>  test2.py:7 #单行代码耗时

打印的信息包含了记录时间、线程数、总耗时、单行代码耗时、CPU执行时间等信息。

在多行代码分析的情况下的使用效果(分别统计生成一千万长度、一亿长度、两亿长度的列表耗时):

?
1
2
3
4
5
6
7
8
9
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 <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.pyMIDDLEWARE 中添加如下配置:

?
1
2
3
4
5
MIDDLEWARE = [
    ...
    'pyinstrument.middleware.ProfilerMiddleware',
    ...
]

然后就可以在 url 上加一个参数 profile 就可以:

Python中性能分析利器pyinstrument详细讲解

Pyinstrument还支持flask、异步代码的性能分析,具体可以查看官方文档进行学习。
Pyinstrument也提供了丰富的api供我们使用,官网文档有详细的介绍:https://pyinstrument.readthedocs.io/en/latest/reference.html

三、Pyinstrument与cProfile(python自带性能分析器)的不同

根据官方文档的描述来看,Pyinstrument的系统开销会比cProfile 这类跟踪分析器小很多,cProfile由于大量调用探查器,可能会扭曲测试结果:

Python中性能分析利器pyinstrument详细讲解

总结

到此这篇关于Python中性能分析利器pyinstrument详细讲解的文章就介绍到这了,更多相关Python性能分析利器pyinstrument内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/momoda118/article/details/122805206

延伸 · 阅读

精彩推荐
  • Pythoncall在Python中改进数列的实例讲解

    call在Python中改进数列的实例讲解

    在本篇文章里小编给大家整理了一篇关于call在Python中改进数列的实例讲解内容,有兴趣的朋友们可以学习下。...

    小妮浅浅4262021-08-11
  • PythonPython实现查找系统盘中需要找的字符

    Python实现查找系统盘中需要找的字符

    这篇文章主要介绍了Python实现查找系统盘中需要找的字符,涉及Python字符查找的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    G05615602020-07-23
  • PythonPyQt5 实现给无边框widget窗口添加背景图片

    PyQt5 实现给无边框widget窗口添加背景图片

    这篇文章主要介绍了PyQt5 实现给无边框widget窗口添加背景图片的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    ros_tyler9112021-09-17
  • PythonPython进度条的使用

    Python进度条的使用

    在使用Python处理比较耗时操作的时候,为了便于观察处理进度,就需要通过进度条将处理情况进行可视化展示,本文主要介绍了Python进度条的使用,分享给...

    老马的程序人生9132021-11-02
  • PythonPython 模拟死锁的常见实例详解

    Python 模拟死锁的常见实例详解

    这篇文章主要为大家介绍了Python 模拟死锁的常见实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    宇宙之一粟6842022-08-30
  • Python详解 Python中LEGB和闭包及装饰器

    详解 Python中LEGB和闭包及装饰器

    这篇文章主要介绍了详解 Python中LEGB和闭包及装饰器的相关资料,主要介绍了函数作用域和闭包的理解和使用方法及Python中的装饰器,需要的朋友可以参考下...

    wwwdc10122522020-11-30
  • PythonPython中的pygal安装和绘制直方图代码分享

    Python中的pygal安装和绘制直方图代码分享

    这篇文章主要介绍了Python中的pygal安装和绘制直方图代码分享,具有一定借鉴价值,需要的朋友可以参考下。...

    chipsKe4002020-12-23
  • PythonPython简单基础小程序的实例代码

    Python简单基础小程序的实例代码

    这篇文章主要介绍了Python简单基础小程序的实例代码,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下...

    月为暮12202021-06-21