python性能分析之line_profiler模块-耗时,效率 时间
20210203
直接用pycharm 自带的
20201215
直接装不上的情况下
先下载安装文件 再安装
line_profiler使用装饰器(@profile)标记需要调试的函数.用kernprof.py脚本运行代码,被选函数每一行花费的cpu时间以及其他信息就会被记录下来。
安装
pip3 install Cpython
pip3 install Cython git+https://github.com/rkern/line_profiler.git
代码演示
loopdemo.py 100以内哪两个数相加等于100.
首先是没有优化过的双层循环的嵌套
@profile
def foo():task = []for a in range(0, 101):for b in range(0, 101):if a + b == 100:task.append((a, b))return task@profile
def run():for item in foo():passif __name__ == '__main__':run()
运行下面的命令
kernprof -l -v loopdemo.py
-l表示逐行分析,-v用于输出。同时会输出一个文件:juliademo.py.lprof,后期可以对.lprof文件进行分析
输出结果
Wrote profile results to loopdemo.py.lprof
Timer unit: 1e-06 sTotal time: 0.009856 s
File: loopdemo.py
Function: foo at line 1Line # Hits Time Per Hit % Time Line Contents
==============================================================1 @profile2 def foo():3 1 1.0 1.0 0.0 task = []45 102 47.0 0.5 0.5 for a in range(0, 101):6 10302 4741.0 0.5 48.1 for b in range(0, 101):7 10201 4975.0 0.5 50.5 if a + b == 100:8 101 91.0 0.9 0.9 task.append((a, b))9 1 1.0 1.0 0.0 return taskTotal time: 0.017778 s
File: loopdemo.py
Function: run at line 12Line # Hits Time Per Hit % Time Line Contents
==============================================================12 @profile13 def run():14 102 17747.0 174.0 99.8 for item in foo():15 101 31.0 0.3 0.2 pass
引入kernprof.py会额外的增加是时间,但是为了检测代码每一行发生了什么,这个影响没什么,实际代码运行的时候是不带@profile装饰器的只有需要line_profiler进行逐行分析的时候才需要加。
总用时Total time: 0.017778 s
Hits是调用次数。
%Time 列告诉我们哪行代码占了它所在函数的消耗的时间百分比,可以看出在foo函数中最消耗时间的是判断a+b==100,占用了50.5%的时间。
然后我对循环部分做下面的优化其他地方不变。
for a in range(0, 101):b = 100 - atask.append((a, b))return task
得到下面的结果
Wrote profile results to loopdemo.py.lprof
Timer unit: 1e-06 sTotal time: 0.000126 s
File: loopdemo.py
Function: foo at line 1Line # Hits Time Per Hit % Time Line Contents
==============================================================1 @profile2 def foo():3 1 1.0 1.0 0.8 task = []45 102 33.0 0.3 26.2 for a in range(0, 101):6 101 47.0 0.5 37.3 b = 100 - a7 101 45.0 0.4 35.7 task.append((a, b))8 1 0.0 0.0 0.0 return taskTotal time: 0.000282 s
File: loopdemo.py
Function: run at line 11Line # Hits Time Per Hit % Time Line Contents
==============================================================11 @profile12 def run():13 102 256.0 2.5 90.8 for item in foo():14 101 26.0 0.3 9.2 pass
可以发现总用时,循环体里代码的调用次数减少了
Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言,其具有高可扩展性和高可移植性,具有广泛的标准库,受到开发者的追捧,广泛应用于开发运维(DevOps)、数据科学、网站开发和安全。然而,它没有因速度和空间而赢得任何称赞,主要原因是Python是一门动态类型语言,每一个简单的操作都需要大量的指令才能完成。
所以这更加需要开发者在使用Python语言开发项目时协调好程序运行的时间和空间。
1、分析时间耗时
分析项目消耗的时间消耗,依托于line_profiler模块,其可以计算出执行每行代码所需占用的CPU时间。
第1步:安装line_profiler模块,我是用pip安装一直失败,所以下载到本地进行离线安装,指令如下所示:
pip install .\line_profiler-3.0.2-cp37-cp37m-win_amd64.whl
安装成功效果如下所示:
第2步:分析每行代码的运行时间,本案例Demo检测for循环一万次累加和while循环一万次累加的时间,并进行对比,实现代码如下所示:
from line_profiler import LineProfilerdef operation1():num=0for i in range(10000):num += 1def operation2():num=0while(num < 10000):num += 1if __name__ == "__main__":lprofiler = LineProfiler(operation1,operation2)lprofiler.run('operation1()')lprofiler.run('operation2()')lprofiler.print_stats()
运行程序,可见while循环速度稍微慢一些,效果如下所示:
2、分析空间耗时
memory_profiler模块可实现对Python项目中每一个代码的内存消耗进行分析和监控。
第1步:安装memory_profiler库文件,指令如下所示:
pip install memory_profiler
安装成功效果如下所示:
第2步:分析每行代码的空间消耗,本案例Demo检测for循环一万次累加和while循环一万次累加的消耗空间,并进行对比,实现代码如下所示:
from memory_profiler import profile@profile
def operation1():num=0for i in range(10000):num += 1@profile
def operation2():num=0while(num < 10000):num += 1if __name__ == "__main__":operation1()operation2()
由于是简单运算消耗的内存是微乎其微的,效果如下所示:
https://www.cnblogs.com/2020-zhy-jzoj/p/13164788.html
python性能分析之line_profiler模块-耗时,效率 时间相关推荐
- Python性能分析优化及测试
Python性能分析优化及测试 写在前面 CPU分析工具 简单的time方法以及包装成的修饰器 timeit UNIX的time命令进行简单的计时 cProfile:分析每个函数运行花费的时间 lin ...
- python性能分析(一)——使用timeit给你的程序打个表吧
前言 我们可以通过查看程序核心算法的代码,得知核心算法的渐进上界或者下界,从而大概估计出程序在运行时的效率,但是这并不够直观,也不一定十分靠谱(在整体程序中仍有一些不可忽略的运行细节在估计时被忽略了) ...
- python性能分析工具模块_python——关于Python Profilers性能分析器
1. 介绍性能分析器 profiler是一个程序,用来描述运行时的程序性能,并且从不同方面提供统计数据加以表述.Python中含有3个模块提供这样的功能,分别是cProfile, profile和ps ...
- python性能分析工具模块_Python Profilers 分析器
实时用户手册¶ 本节是为 "不想阅读手册" 的用户提供的.它提供了非常简短的概述,并允许用户快速对现有应用程序执行评测. 要分析采用单个参数的函数,可以执行以下操作: import ...
- Python 性能分析入门指南
为什么80%的码农都做不了架构师?>>> 在岭南六少博客找到的好东西. 注: 本文的原作者是 Huy Nguyen ,原文地址为 A guide to analyzing Py ...
- python性能分析与优化
性能分析: 1.种类: 基于事件的性能分析通过收集程序执行过程中的具体事件进行工作,每个调用都会触发,输出数据量大,精度高def profiler(frame, event, arg):print ' ...
- python性能分析工具总结
性能分析工具的使用 cProfile 介绍 它是一种确定性的性能分析器,提供了一组API帮助开 发者收集Python程序运行的信息,更确切地说,是统计每个函数消耗的 CPU时间.同时它还提供了其他细节 ...
- Python性能分析入门——cProfile、可视化、逐行分析、内存分析
文章目录 简介 cProfile PyCharm 可视化 安装 gprof2dot SnakeViz PyCallGraph 逐行分析 内存分析 内存堆分析 其他 遇到的坑 参考文献 简介 通过性能分 ...
- Python性能分析 (Profiling)
此页由Linux Wiki用户 Chenxing于2012年3月21日 (星期三) 07:02的最后更改. 提示:此文已超过 2 年(960 天)未更新,如发现内容过时或有误,欢迎改进:) 性能分析( ...
最新文章
- ElasticSearch 2 (38) - 信息聚合系列之结束与思考
- 用kali的Meterpreter控制win10,可以偷看你的电脑的所有数据
- 叮!快收好这份Android网络性能监控方案
- 【Linux网络编程】浅谈 TCP 三次握手和四次挥手
- js防篡改对象之不可扩展对象
- TOMCAT内存溢出问题
- javascipt很有用的代码,实现全选与反选,还可以与struts2或sevelet交互使用
- SQL Server复制功能 巧妙选择避开Bug
- 对Javascript“闭包”的简单理解
- 实用的Portraiture滤镜磨皮教程
- WiFi 扫描结果的通知过程
- SCI 期刊、SCIE 期刊和 ESCI 期刊的比较
- 利用python获取股票折线图_python绘制香农的投资组合折线图
- QQ/微信里被禁止访问的网页怎么处理 被屏蔽的域名如何正常访问
- 基于原生JS项目使用Vue3 + Surely Vue Table组件
- 如何禁止计算机自动安装驱动,win10系统禁止自动安装驱动的详细技巧
- 手把手带你搭建一个自己的云服务器并部署Web程序
- svn下载与安装(内含汉化,亲测可用)
- 网赚项目之站群第四课站群的文章采集与伪原创
- proteus 8 打开proteus 7版本仿真文件的两个方法