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模块-耗时,效率 时间相关推荐

  1. Python性能分析优化及测试

    Python性能分析优化及测试 写在前面 CPU分析工具 简单的time方法以及包装成的修饰器 timeit UNIX的time命令进行简单的计时 cProfile:分析每个函数运行花费的时间 lin ...

  2. python性能分析(一)——使用timeit给你的程序打个表吧

    前言 我们可以通过查看程序核心算法的代码,得知核心算法的渐进上界或者下界,从而大概估计出程序在运行时的效率,但是这并不够直观,也不一定十分靠谱(在整体程序中仍有一些不可忽略的运行细节在估计时被忽略了) ...

  3. python性能分析工具模块_python——关于Python Profilers性能分析器

    1. 介绍性能分析器 profiler是一个程序,用来描述运行时的程序性能,并且从不同方面提供统计数据加以表述.Python中含有3个模块提供这样的功能,分别是cProfile, profile和ps ...

  4. python性能分析工具模块_Python Profilers 分析器

    实时用户手册¶ 本节是为 "不想阅读手册" 的用户提供的.它提供了非常简短的概述,并允许用户快速对现有应用程序执行评测. 要分析采用单个参数的函数,可以执行以下操作: import ...

  5. Python 性能分析入门指南

    为什么80%的码农都做不了架构师?>>>    在岭南六少博客找到的好东西. 注: 本文的原作者是 Huy Nguyen ,原文地址为 A guide to analyzing Py ...

  6. python性能分析与优化

    性能分析: 1.种类: 基于事件的性能分析通过收集程序执行过程中的具体事件进行工作,每个调用都会触发,输出数据量大,精度高def profiler(frame, event, arg):print ' ...

  7. python性能分析工具总结

    性能分析工具的使用 cProfile 介绍 它是一种确定性的性能分析器,提供了一组API帮助开 发者收集Python程序运行的信息,更确切地说,是统计每个函数消耗的 CPU时间.同时它还提供了其他细节 ...

  8. Python性能分析入门——cProfile、可视化、逐行分析、内存分析

    文章目录 简介 cProfile PyCharm 可视化 安装 gprof2dot SnakeViz PyCallGraph 逐行分析 内存分析 内存堆分析 其他 遇到的坑 参考文献 简介 通过性能分 ...

  9. Python性能分析 (Profiling)

    此页由Linux Wiki用户 Chenxing于2012年3月21日 (星期三) 07:02的最后更改. 提示:此文已超过 2 年(960 天)未更新,如发现内容过时或有误,欢迎改进:) 性能分析( ...

最新文章

  1. ElasticSearch 2 (38) - 信息聚合系列之结束与思考
  2. 用kali的Meterpreter控制win10,可以偷看你的电脑的所有数据
  3. 叮!快收好这份Android网络性能监控方案
  4. 【Linux网络编程】浅谈 TCP 三次握手和四次挥手
  5. js防篡改对象之不可扩展对象
  6. TOMCAT内存溢出问题
  7. javascipt很有用的代码,实现全选与反选,还可以与struts2或sevelet交互使用
  8. SQL Server复制功能 巧妙选择避开Bug
  9. 对Javascript“闭包”的简单理解
  10. 实用的Portraiture滤镜磨皮教程
  11. WiFi 扫描结果的通知过程
  12. SCI 期刊、SCIE 期刊和 ESCI 期刊的比较
  13. 利用python获取股票折线图_python绘制香农的投资组合折线图
  14. QQ/微信里被禁止访问的网页怎么处理 被屏蔽的域名如何正常访问
  15. 基于原生JS项目使用Vue3 + Surely Vue Table组件
  16. 如何禁止计算机自动安装驱动,win10系统禁止自动安装驱动的详细技巧
  17. 手把手带你搭建一个自己的云服务器并部署Web程序
  18. svn下载与安装(内含汉化,亲测可用)
  19. 网赚项目之站群第四课站群的文章采集与伪原创
  20. proteus 8 打开proteus 7版本仿真文件的两个方法

热门文章

  1. 淘宝获取单笔订单信息服务端调用API及流程
  2. 2022-2028年中国BOPET薄膜行业市场全景调查及投资前景预测报告
  3. SpringBoot (三) :SpringBoot使用Freemarker模板引擎渲染web视图
  4. 多版本python共存,安装三方库到指定python版本 多Python版本和虚拟环境
  5. Warshall算法多源点之间最短路径的算法最短距离
  6. 迭代是人,递归是神(迭代与递归的总结:比较)
  7. Mysql分页order by数据错乱重复
  8. LeetCode简单题之数组中的字符串匹配
  9. LeetCode简单题之二叉搜索树的范围和
  10. MindInsight计算图可视设计