python 性能分析工具 - cProfile

Python使用cProfile进行性能分析使用详解 在Python开发中,代码性能分析是优化和调试的重要环节。通过性能分析,可以找出程序中性能瓶颈,进而进行优化。cProfile是Python内置的性能分析工具,它可以详细地分析代码的执行时间和函数调用情况。本文将详细介绍如何使用cProfile进行代码性能分析,涵盖安装、基本用法、分析结果解读和实际应用案例。 阅读详情

date: 2022-12-05 14:23


上手示例

使用比较简单,直接看例子:

import cProfile
import timeline_window

cProfile.run('timeline_window.main()')

timeline_window 是我们要测试的模块,timeline_window.main() 是它的主函数。
执行完之后打印如下信息

C:\Python37\python.exe C:\Users\edison\PycharmProjects\DataViz\performace_test.py 
         865497 function calls (858749 primitive calls) in 2.977 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        4    0.000    0.000    0.000    0.000 <__array_function__ internals>:2(amax)
       19    0.000    0.000    0.001    0.000 <__array_function__ internals>:2(any)
       17    0.000    0.000    0.001    0.000 <__array_function__ internals>:2(argwhere)
        1    0.000    0.000    0.000    0.000 <__array_function__ internals>:2(array_equal)
     1603    0.001    0.000    0.005    0.000 <__array_function__ internals>:2(atleast_1d)
        6    0.000    0.000    0.000    0.000 <__array_function__ internals>:2(atleast_2d)
        6    0.000    0.000    0.000    0.000 <__array_function__ internals>:2(concatenate)
      811    0.001    0.000    0.001    0.000 <__array_function__ internals>:2(copyto)
        7    0.000    0.000    0.000    0.000 <__array_function__ internals>:2(empty_like)
      ...

每一行依次列出了各个子函数的运行分析信息:

  • ncalls 调用次数

  • tottime 在给定函数中花费的总时间(不包括调用子函数的时间)

  • percall tottime除以ncalls的商

  • cumtime 是在这个函数和所有子函数中花费的累积时间(从调用到退出)。

  • percall是cumtime除以原始调用次数的商

  • filename:lineno(function) 提供每个函数的各自信息

    保存性能数据

import cProfile
import timeline_window

cProfile.run('timeline_window.main()', 'restats')

性能数据的文件会保存到当前目录下的restats文件中。

查看性能数据

加载这些数据,可以进行后续的比较分析。

import pstats
from pstats import SortKey

# 加载保存到restats文件中的性能数据
p = pstats.Stats('restats')

# 打印所有统计信息
p.strip_dirs().sort_stats(-1).print_stats()

查看耗时最多的子函数

最常用的是,查看耗时最多的函数排序,比如前十个:

# 打印累计耗时最多的10个函数
p.sort_stats(SortKey.CUMULATIVE).print_stats(10)

# 打印内部耗时最多的10个函数(不包含子函数)
p.sort_stats(SortKey.TIME).print_stats(10)
Mon Dec  5 16:20:20 2022    restats

         42734012 function calls (42727371 primitive calls) in 43.122 seconds

   Ordered by: cumulative time
   List reduced from 2541 to 10 due to restriction <10>

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    290/1    0.002    0.000   43.589   43.589 {built-in method builtins.exec}
        1    0.026    0.026   43.589   43.589 timeline_window.py:153(main)
        1    0.000    0.000   40.626   40.626 timeline_window.py:141(load_events_from_file)
        1    0.000    0.000   39.737   39.737 timeline_window.py:131(add_timestamps_scatter)
        1    0.010    0.010   39.722   39.722 timeline_scatter.py:80(set_events)
      801    0.005    0.000   39.419    0.049 PlotItem.py:597(addLine)
      803    0.012    0.000   39.309    0.049 PlotItem.py:521(addItem)
      808    0.008    0.000   39.286    0.049 ViewBox.py:402(addItem)
     1628    0.205    0.000   39.004    0.024 ViewBox.py:896(updateAutoRange)
     3231   10.849    0.003   38.744    0.012 ViewBox.py:1404(childrenBounds)

于是,我们找到了耗时的大头: 调用了 801 次耗时 39ms 的 PlotItem.py:597(addLine) 函数。

参考链接

教你3个python「性能分析」工具,再也不用自己计算函数耗时了

深入性能分析:解锁 `cProfile` 工具使用的关键技巧与最佳实践 cProfile性能分析是 Python 开发者迈向高效编程的重要步骤。cProfile工具作为 Python 内置性能分析利器,能够帮助开发者精准定位瓶颈并进行合理优化。关注关键路径:选择影响性能的核心模块进行深入分析。数据结合场景:用场景驱动优化,不盲目追求小数值。工具结合生态:借助可视化工具(如snakeviz)提升分析效率。希望这篇文章能让你更自信地使用cProfile应对性能优化挑战。欢迎分享你的经验或提出问题,让我们一起探索 Python 的更多可能! 阅读详情

相关推荐

【调优工具】python性能分析工具cProfiler

Python中常用的性能分析工具cProfiler的使用方法。主要内容包括: 1. cProfiler基础使用示例,展示如何统计函数调用次数和时间消耗 2. 优雅使用cProfiler的两种方法:通过Profile类接口和装饰器封装 3. 性能分析报告的解读方法,包括排序和筛选关键数据 4. 其他辅助工具介绍:pstats模块处理二进制分析文件,以及如何可视化分析结果 文章重点讲解了cProfiler的接口使用、分析报告解读以及如何将分析工具集成到项目中,为Python性能优化提供了实用的技术方案。

sysu_lluozh 1543

Python 性能优化|cProfile 使用技巧

cProfile 提供了 Python 程序的稳定性性能分析;即通过监控所有函数调用、函数返回和异常事件,并对这些事件之间的间隔进行精确计时。实现统计程序的各个部分执行的频率和时间。cPorfile 的性能分析往往可以使用增加很小的处理开销,提供有关 Python 程序执行的大量运行时的统计信息。

长行 4575

Python性能分析工具cProfile与pstats

cProfile: 负责收集详细的性能数据pStats: 负责对收集的数据进行排序、过滤和展示优势: 标准库内置、使用简单、数据准确用途: 性能优化、瓶颈定位、代码调优这两个工具是 Python 开发者进行性能优化的必备利器!您提出的这种用法确实更优雅、更专业!👍 这是我实际工作中更推荐的写法。

我的博客 109

python 利用cProfile进行性能分析

Python性能分析之cProfile模块

weixin_43287494的博客 3139

SPICE模型入门到精通

文章目录前言一、SPICE是什么?二、1. 前言 由于笔者的毕业设计与功率半导体器件建模相关,需要用到SPICE软件来建模,在这记录一下从零开始的SPICE学习历程~ 一、SPICE是什么? 电子产品的设计一般先从功能框图开始,然后细化到原理图,还要经过很调试验证过程,最终才能完成。调试和验证的过程复杂而繁琐,在设计集成电路时更是如此,在制造之前急需验证集成电路的功能。 根据电路理论,人们可以建立起节点方程和回路方程,通过解这些方程组成的方程组就可以得到结果,也就是说可以通过计算来获得电路的工作情况。但

qq_42031914的博客 7万+

PyTorch实战:手把手教你用QAT量化感知训练拯救模型精度(附避坑指南)

本文详细介绍了如何使用PyTorch进行QAT量化感知训练,以提升模型在边缘设备上的推理精度。通过核心原理讲解、实战代码示例和避坑指南,帮助开发者掌握从环境配置、模型训练到边缘部署的全流程,有效解决传统量化方法导致的精度损失问题。

c7d8e的博客 329

Python 性能分析工具 cProfile 使用教程

本文介绍了Python标准库中的性能分析工具cProfile,包括其特点、安装方法及基本操作。cProfile通过统计函数调用次数和耗时帮助定位性能瓶颈,支持命令行和编程集成两种使用方式。文章详细解析了分析结果的各项指标,并展示了高级功能如结果过滤、排序和可视化分析(使用Snakeviz生成火焰图或CProfileV展示Web界面)。最后给出了典型使用场景和注意事项,建议开发者定期使用cProfile进行性能优化,优先处理累计耗时高的函数,同时结合内存分析工具提升程序效率。

破烂PAN 的博客 1394

西门子AI面试问答(STAR法则回答实例)

通过建立良好的沟通渠道、倡导透明和积极的沟通,并建立信任和共享目标的文化,我成功地改善了团队合作的氛围和效果。对于一些存在分歧和冲突的情况,我采用了积极的解决问题的态度,促进双方的沟通和理解,寻找共同的利益点和解决方案。我的成果得到了评委和观众的认可,并为我的学术发展和进一步的科学研究奠定了基础。首先,我主动与团队成员进行一对一的沟通,倾听他们的观点和意见,了解他们在合作中遇到的问题和需求。我还参加了学校组织的科学俱乐部和研究小组,与其他热衷科学的同学一起进行讨论和实验,加深我的理解和实践技能。

kashine的博客 7249

Python时间性能分析工具cProfile

cumtime:表示该函数及其所有子函数的调用运行的时间,即函数开始调用到返回的时间;percall:(第二个percall)即函数运行一次的平均时间,等于 cumtime/ncalls;# 按照函数名排序,只打印前3行函数的信息, 参数还可为小数,表示前百分之几的函数信息。tottime:表示指定函数的总的运行时间,除掉函数中调用子函数的运行时间;# 和直接运行cProfile.run("test()")的结果是一样的。# sort_stats(): 排序,支持的方式和上述的一致。

king900117的博客 449

STM32 Modbus-RTU从零到实战:手把手教你用HAL库实现工业通信(附完整代码)

本文详细介绍了如何使用STM32 HAL库从零开始实现Modbus-RTU从机通信。内容涵盖RS485硬件设计、CubeMX串口与定时器配置、基于空闲中断的高效数据接收、协议栈状态机设计、CRC16校验实现以及常用功能码处理。文章提供了完整的代码框架和调试方法,帮助开发者快速构建稳定的工业通信节点。

weixin_28278377的博客 186

容器化部署指南——Docker/K8s环境下的OpenClaw实践(附Dockerfile)

通过本文的详细指导,你已经掌握了OpenClaw在Docker和Kubernetes环境中的容器化部署方法。从基础镜像构建到高级部署策略,从开发环境到生产环境,你现在已经具备了完整的容器化部署能力。 容器化技术为OpenClaw提供了灵活、可扩展、可移植的部署方案,能够满足不同规模和需求的应用场景。通过合理使用Docker和Kubernetes,你可以实现高效的部署管理和运维自动化。 在实际应用中,建议根据具体的业务需求选择合适的部署策略,并结合监控、日志、安全等最佳实践,确保系统的稳定性和可靠性。同时

博客 495

Python性能分析工具-cProfile

cProfile——Python性能分析工具 摘录:https://www.cnblogs.com/kaituorensheng/p/4453953.html Python自带了几个性能分析的模块:profile、cProfile和hotshot,使用方法基本都差不多,无非模块是纯Python还是用C写的。本文介绍cProfile。 例子 import t...

weixin_38170137的博客 213

基于图像形态学处理的交通灯检测识别matlab仿真

图像形态学处理是基于数学形态学的理论,利用结构元素(如矩形、圆形等)对图像进行处理,通过将结构元素与图像进行特定的逻辑运算,来提取图像中的目标特征、去除噪声、改善图像质量等。在交通灯检测识别中,主要利用交通灯的颜色、形状等特征,通过形态学操作突出这些特征,抑制背景和噪声干扰,从而实现对交通灯的准确检测和识别。图像采集与预处理采集:通过安装在车辆或道路上的摄像头获取交通场景图像。灰度化:将彩色图像转换为灰度图像,减少数据量,便于后续处理。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 160

Python 性能分析工具cprofile、line-profile

本文介绍了两种Python性能分析工具:cProfile和line-profiler。cProfile提供了多种使用方式,包括通过cProfile.Profile类精细控制分析流程、使用runctx提供上下文、直接使用cProfile.run分析函数,以及通过命令行分析模块执行。分析结果可以按不同字段排序,并支持输出到文件或使用可视化工具查看。line-profiler则通过装饰器@profile标记函数,使用kernprof工具运行脚本,或通过LineProfiler类动态添加分析目标。其输出结果详细展示

weixin_43791406的博客 769

2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(六级)答案 + 解析

2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(六级)答案 + 解析

伶俐角少儿编程 728

大聪明教你学Java | Seata 2.5 从下载到运行:全流程编译部署教程

Seata 2.5 版本带来了不少特性优化,但实际部署时却发现一个尴尬问题:全网找不到一篇完整覆盖「Git 源码下载→本地编译→环境配置→启动验证」的实操教程。作为一名踩遍无数坑才成功跑通的开发者,我深知这个过程的煎熬:Git 拉取源码后编译失败、依赖版本冲突、配置文件参数混乱、启动时端口占用或连接报错… 每一个坑都能耗费数小时排查。为了让后续开发者少走弯路,我将自己从0到1的完整实操经验整理成文,跟着步骤走即可成功运行 Seata 2.5.

不肯过江东丶 2071

Python 性能分析工具 cProfile

Python性能分析神器,帮我找到了一个耗时小坑;填坑快乐~

一得同学 1065

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

pycallgraph与其他Python性能分析工具对比:cProfile、line_profiler等终极指南

在Python开发中,性能优化是一个永恒的话题。**pycallgraph**作为一款强大的Python调用图生成工具,为开发者提供了独特的可视化性能分析视角。本文将深入对比pycallgraph与cProfile、line_profiler等主流Python性能分析工具,帮助您选择最适合的优化方案。 ## 📊 Python性能分析工具全景图 Python生态系统提供了多种性能分析工具,每种

gitblog_00344的博客 640

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Python中cProfile性能分析工具的使用

cProfile真的是太强大了! 更多详细内容参见:官方文档。 这里仅仅列出我用到的一些部分作为记录 0 - import几个库 import cProfile import pstats 1 - 分析某条语句: #c_Markov = c_MarkovCreater(savefilename) cProfile.run("c_Markov = c_MarkovCreater

yeze的专栏 6503

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

python cprofile_cProfile Python性能分析工具使用详解

前言Python自带了几个性能分析的模块:profile、cProfile和hotshot,使用方法基本都差不多,无非模块是纯Python还是用C写的。本文介绍cProfile。例子import timedef func1():sum = 0for i in range(1000000):sum += idef func2():time.sleep(10)func1()func2()运行pytho...

weixin_39976499的博客 138

(python)性能分析工具-cProfile

cProfile 是 Python 标准库中的一个模块,用于分析 Python 程序的性能。

MARST.ZHANG的博客 1751

python性能分析工具:cProfile使用

在进行python开发时需要对python脚本的性能分析,以便对python脚本进行优化,下面使用cProfile和 pstats对python脚本性能分析。cProfile思路 1.使用cProfile模块生成脚本执行的统计信息文件 2.使用pstats格式化统计信息,并根据需要做排序分析处理1.使用cProfile模块生成脚本执行的统计信息文件 python -m cProfile -o

潇洒哥的读书笔记 5742

【新手python程序员必须明白的真相】26.新手Python程序员必须明白的性能分析工具:cProfile早用对,瓶颈早发现!

性能优化不是玄学,而是可以精确测量的科学。80%的时间往往消耗在20%的代码上一个O(n²)的算法在n=10000时要比O(n)慢10000倍用对工具能让调试效率提升10倍编程就像修车,cProfile就是你的诊断仪。下次遇到卡顿的代码时,别再用"print大法"瞎猜了,让数据告诉你真相。保持这份刨根问底的精神,你离资深工程师又近了一步!

1141

Python程序性能分析工具链:cProfile与火焰图实战指南

性能分析是Python开发中定位瓶颈的核心手段,它通过采样或插桩的方式量化函数调用频率与耗时,帮助开发者摆脱直觉猜测,用数据驱动优化决策。cProfile作为标准库自带的确定性分析器,能精准记录每次调用的时间与次数,是离线环境下的首选。结合火焰图的可视化呈现,将复杂的调用堆栈转化为直观的横向宽度与纵向深度分布,让CPU热点、调用层级与异常形状一目了然。两种工具互补,适用于API接口调优、爬虫任务提速、数据处理脚本优化等常见场景。从命令行到脚本内嵌,再到pstats交互式分析,掌握完整链路后,再引入py-sp

weixin_33462927的博客 164

python性能分析工具cProfile 的使用

python性能测试器:profile、hotshot、cProfile profile较早,模块是Python写成的,同来测试函数的执行时间及每次脚本执行的总时间。 hotshot模块在python2.2中新增,用C写成,有效提高了性能。 cProfile模块是python2.5新增,它替换掉hotshot和profile模块。作者明确了明显的缺点是:需要花较长时间从日志文件中载...

weixin_30663471的博客 2081

cProfile——Python性能分析工具

Python自带了几个性能分析的模块:profile、cProfile和hotshot,使用方法基本都差不多,无非模块是纯Python还是用C写的。本文介绍cProfile。 例子 import time def func1(): sum = 0 for i in range(1000000): sum += i ...

weixin_33834910的博客 166
上一篇: 光流方向以及 remap 重映射的理解
下一篇: python 虚拟环境继承系统 packages
十橙
博客等级 码龄24年 312粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值