本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills

  这是我的系列文章「Python实用秘技」的第6期,本系列立足于笔者日常工作中使用Python积累的心得体会,每一期为大家带来一个几分钟内就可学会的简单小技巧。

  作为系列第6期,我们即将学习的是:一行代码分析Python代码行级别内存消耗

  很多情况下,我们需要对已经写好的Python程序的内存消耗进行优化,但是一段代码在运行过程中的内存消耗是动态变化的,这种时候就可以用到memory_profiler这个第三方库,它可以帮助我们分析记录Python脚本中,执行到每一行时,内存的消耗及波动变化情况。

  memory_profiler的使用方法超级简单,使用pip install memory_profiler完成安装后,只需要从memory_profiler导入profile并作为要分析的目标函数的装饰器即可,譬如下面这个例子:

demo.py

import numpy as np
from memory_profiler import profile @profile
def demo():
a = np.random.rand(10000000)
b = np.random.rand(10000000) a_ = a[a < b]
b_ = b[a < b] del a, b return a_, b_ if __name__ == '__main__':
demo()

  接着在终端执行python demo.py,稍事等待后,就会看到打印出的分析结果报告(这里我是在jupyter lab里执行的终端命令):

  其中Line #列记录了分析的各行代码具体行位置,Mem usage列记录了当程序执行到该行时,当前进程占用内存的量,Increment记录了当前行相比上一行内存消耗的变化量,Occurrences记录了当前行的执行次数(循环、列表推导等代码行会记作多次),Line Contents列则记录了具体对应的行代码。

  通过这样细致的内存分析结果,我们就能有的放矢地优化我们的代码啦~


  本期分享结束,咱们下回见~

最新文章

  1. Java面试题整理二(侧重SSH框架)
  2. LoadRunner 脚本学习 -- 使用动态链接库
  3. sdk 更新的时连接不上dl-ssl.google.com解决办法
  4. [Effective JavaScript 笔记]第15条:当心局部块函数声明笨拙的作用域
  5. Gym 100971D Laying Cables 单调栈
  6. I/O小总结
  7. 下拉刷新ListView实现原理
  8. 使用 voluptuous 校验数据
  9. bootstrap学习笔记之基础导航条 http://www.imooc.com/code/3111
  10. 2018蓝桥杯 省赛D题(测试次数)
  11. hdu 3415&quot;Max Sum of Max-K-sub-sequence&quot;(单调队列)
  12. VUE的语法笔记
  13. java 扫描输入
  14. Android 自动化测试——Monkey测试
  15. 免费CDN公共库——网站提速 静态资源库
  16. Codeforces 817C Really Big Numbers - 二分法 - 数论
  17. ROS-PCQ基于IP的限速(总带宽上下行5M)
  18. IEEE Bigger系列题解
  19. Sybase数据库第三方软件安装
  20. 常见企业IT支撑【4、gitlab代码管理工具】

热门文章

  1. CSS中inherit指定继承的使用方法和auto的区别
  2. 【笔记】论文阅读:《Gorilla: 一个快速, 可扩展的, 内存式时序数据库》
  3. Qt之QColorDialog
  4. &amp;&amp; || 区别
  5. Typora基础快捷键使用流程
  6. APC 篇——总结与提升
  7. react之withRouter的作用
  8. 细说string和stringbuffer
  9. 防火墙——firewalld
  10. vue+element ui中select组件选择失效问题原因与解决方法