iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python中性能分析利器pyinstrument详细讲解
  • 165
分享到

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

2024-04-02 19:04:59 165人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、前言二、Pyinstrument使用三、Pyinstrument与cProfile(python自带性能分析器)的不同总结一、前言 程序的性能也是非常关键的指标,很多时候你的

一、前言

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

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 安装:

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.1
Program: D:/code/server/aitestdemo/test2.py
0.385 <module>  test2.py:2  #执行总耗时
└─ 0.385 <listcomp>  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 <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 中添加如下配置:

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性能分析利器pyinstrument内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python中性能分析利器pyinstrument详细讲解

本文链接: https://www.lsjlt.com/news/138272.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python中性能分析利器pyinstrument详细讲解
    目录一、前言二、Pyinstrument使用三、Pyinstrument与cProfile(python自带性能分析器)的不同总结一、前言 程序的性能也是非常关键的指标,很多时候你的...
    99+
    2024-04-02
  • Python性能分析工具pyinstrument提高代码效率
    目录安装简单的使用分析 Flask 代码分析 Django 代码分析异步代码工作原理最后的话天下武功,唯快不破。 编程也不例外,你的代码跑的快,你能快速找出代码慢的原因,你的码功就高...
    99+
    2024-04-02
  • Java详细分析讲解HashMap
    目录1.HashMap数据结构2.HashMap特点3.HashMap中put方法流程java集合容器类分为Collection和Map两大类,Collection类的子接口有Set...
    99+
    2024-04-02
  • Java详细分析讲解泛型
    目录1.泛型概念2.泛型的使用2.1泛型类语法2.2泛型方法语法2.3泛型接口语法2.4泛型在main方法中的使用3.擦除机制4.泛型的上界5.通配符5.1通配符的上界5.2通配符的...
    99+
    2024-04-02
  • Java@GlobalLock注解详细分析讲解
    目录GlobalLock的作用全局锁为什么要使用GlobalLock工作原理GlobalLock的作用 对于某条数据进行更新操作,如果全局事务正在进行,当某个本地事务需要更新该数据时...
    99+
    2022-11-21
    Java @GlobalLock Java @GlobalLock注解
  • Python函数参数分类使用与新特性详细分析讲解
    目录参数分类一,定义与使用角度二,传参方式角度1,位置参数2,默认参数3,可变参数4,关键字参数三,参数新特性1,仅位置参数2,仅关键字参数(命名关键字参数)函数参数看似很平常,在深...
    99+
    2023-01-28
    Python函数参数分类 Python函数参数特性
  • Java超详细分析讲解哈希表
    目录哈希表概念哈希函数的构造平均数取中法折叠法保留余数法哈希冲突问题以及解决方法开放地址法再哈希函数法公共溢出区法链式地址法哈希表的填充因子代码实现哈希函数添加数据删除数据判断哈希表...
    99+
    2024-04-02
  • Python中Numpy库的详细讲解
    本篇内容介绍了“Python中Numpy库的详细讲解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先得了解下什么是Numpy,从我的印象中...
    99+
    2023-06-04
  • python中Path函数讲解【详细】
    文章目录 1、Path函数的基本功能2、常见用法2.1 表示路径2.2 路径的拼接和分解2.3 获取路径 1、Path函数的基本功能 使用pathlib模块来处理文件和文...
    99+
    2023-09-01
    深度学习 图像处理 python
  • C++超详细分析讲解内联函数
    目录宏函数(带参数的宏)的缺点inline修饰的函数就是内联函数内联函数的特点宏函数和内联函数的区别宏函数(带参数的宏)的缺点 第一个问题:宏函数看起来像一个函数调用,但是会有隐藏一...
    99+
    2024-04-02
  • Python OpenCV超详细讲解基本功能
    目录准备工作转成灰度图像高斯模糊边缘检测膨胀运算腐蚀运算准备工作 右击新建的项目,选择Python File,新建一个Python文件,然后在开头import cv2导入cv2库。 ...
    99+
    2024-04-02
  • Java栈与队列超详细分析讲解
    目录一、栈(Stack)1、什么是栈?2、栈的常见方法3、自己实现一个栈(底层用一个数组实现)二、队列(Queue)1、什么是队列?2、队列的常见方法3、队列的实现(单链表实现)4、...
    99+
    2024-04-02
  • Golang pprof性能测试与分析讲解
    目录一、性能分析类型1.CPU性能分析2.内存性能分析3.阻塞性能分析二、cpu性能分析1.生成pporf2.分析数据三、内存性能分析四、benchmark 生成 profile一、...
    99+
    2023-05-14
    Go pprof性能测试 Go pprof性能分析
  • java性能分析jconsole详解
    目录jconsole简介jconsole远程前言: 本章节继续学习java性能优化的相关知识。重点学习什么是jconsole,以及如何使用?它能帮助我们做什么? jconsole简介...
    99+
    2024-04-02
  • mysql详细分析讲解子查询的使用
    出现在其他语句中的 select 语句,称为子查询或内查询;外部的查询语句,称为主查询或 外查询 .  -- 子查询 -- 查询的条件来自于另一查询的结果 SEL...
    99+
    2024-04-02
  • python模型性能ROC和AUC分析详解
    目录正文1. ROC 曲线2. AUC 面积正文 本文将介绍模型性能分析的两个方法:ROC & AUC。 ROC 分析和曲线下面积 (AUC) 是数据科学中广泛使用的工具,...
    99+
    2023-03-22
    python模型性能ROC AUC python模型性能分析
  • Java详细讲解分析双指针法的使用
    目录前言1.判断链表是否有环2.查找链表中间的元素3.奇偶排序前奇后偶4.删除排序链表的重复元素5.三数之和6.分割链表7.合并两个有序的数组8.两数之和—输入有序数组9...
    99+
    2024-04-02
  • C++详细分析讲解函数参数的扩展
    目录一、函数参数的默认值二、函数占位参数三、小结一、函数参数的默认值 C++ 中可以在函数声明时为参数提供一个默认值当函数调用时没有提供参数的值,则使用默认值参数的默认值必须在函数声...
    99+
    2024-04-02
  • Python高光谱遥感影像处理问题详细分析讲解
    目录前言1.波段合并2.波段拆分3.影像裁剪4.批量影像裁剪前言 在写波段配准相关代码时经常需要用到tif影像的波段合成和分解,虽然可以用ENVI才处理,但是每次都要打开再设置一些参...
    99+
    2023-01-28
    Python高光谱遥感影像处理 Python影像处理
  • MyBatis超详细讲解如何实现分页功能
    目录概述:一般用法:student表:Student.javaStudentMapper.xmlStudentService.javaStudentServiceImpl.javaA...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作