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

我们即将学习的是:一行代码分析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, breturn a_, b_if __name__ == '__main__':demo()

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

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

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


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

一行代码搞定Python逐行内存消耗分析相关推荐

  1. 一行代码搞定 Python 逐行内存消耗分析

    作者 | 费弗里 来源 | Python大数据分析 我们即将学习的是:一行代码分析Python代码行级别内存消耗. 很多情况下,我们需要对已经写好的Python程序的内存消耗进行优化,但是一段代码在运 ...

  2. 弃繁就简!一行代码搞定 Python 日志!

    写了这么多年的 Python ,我一直都是使用 Python 自带的 logging 模块来记录日志,每次需要写一些配置将日志输出到不同的位置,设置不同日志输出格式,或者将日志进行分文件和压缩等.这个 ...

  3. 【Python】Autoviz: 一行代码搞定数据集探索并可视化

    数据集各个特征有什么变化趋势.各个特征之间有何关系,我们可以借助Matplotlib.Seaborn等诸多工具来可视化展示,那么有没有一种工具能一次展示所有的关系了? 本文要介绍的Python工具Au ...

  4. Python 数据可视化:Stack Graph 堆叠图,标准化堆叠柱形图,标准化的同时还能反应数据量大小的堆叠图(放入自写库,一行代码搞定复杂细节绘图)

    本文已在公众号 " 数据分析与商业实践 " 首发.关注一下~,更多商业数据分析案例源码等你来撩.后台回复 "堆叠图" ,即可获取本文的案例示范与包含详细注释的源 ...

  5. 开源作品ThinkJDBC—一行代码搞定数据库操作

    1 简介 ThinkJD,又名ThinkJDBC,一个简洁而强大的开源JDBC操作库.你可以使用Java像ThinkPHP框架的M方法一样,一行代码搞定数据库操作.ThinkJD会自动管理数据库连接, ...

  6. 一行代码搞定 Scrapy 随机 User-Agent 设置

    摘要:爬虫过程中的反爬措施非常重要,其中设置随机 User-Agent 是一项重要的反爬措施,Scrapy 中设置随机 UA 的方式有很多种,有的复杂有的简单,本文就对这些方法进行汇总,提供一种只需要 ...

  7. 一行代码搞定 FTP 服务

    环境搭建: python windows/linux pip install pyftpdlib (安装失败请到这里下载:https://pypi.python.org/pypi/pyftpdlib/ ...

  8. thinkjdbc 关闭_ThinkJD: ThinkJD,又名ThinkJDBC,一个强大的开源JDBC/ORM操作库,让你尽可能简洁地用一行代码搞定数据库操作。...

    1 简介 ThinkJD,又名ThinkJDBC,一个简洁而强大的开源JDBC操作库.你可以使用Java像ThinkPHP框架的M方法一样,一行代码搞定数据库操作.ThinkJD会自动管理数据库连接, ...

  9. WPF使用Linq 一行代码搞定数据绑定

    首先设置好DataGrid控件的相关属性,注意XAML代码文件中的列绑定要和源数据的列名一致,如: Binding="{Binding No}" 详细设置如下: this.data ...

最新文章

  1. 第六阶段 小学期(一)——电子商务
  2. 编程语言java-并发(锁)
  3. py匹配字符串中间的字符串
  4. 【毕业求职季】-听说你想去大厂看学姐,带你看看网易java面经
  5. Java进阶:CAS原理详解
  6. 求两数最大公约数,最小公倍数-Java
  7. IOC容器和Bean的配置实例
  8. 11.21 if条件语句 年月日执行判断
  9. xcode 4.2开发 ——navigation controller 添加按钮
  10. Java基本数据类型的自动转换_彻底理解Java中的基本数据类型转换(自动、强制、提升)...
  11. 复制远程服务器的文件 报错 scp: not a regular file
  12. 数据挖掘之CTR预估(FM算法)
  13. php 小墙 垃圾评论,关于php过滤垃圾评论
  14. 计算机用公式找出第一名,用公式查找Excel工作表中重复数据
  15. POJ 2989 All Friends
  16. 16行代码实现微信聊天机器人,自动智能回复,打团了让它来陪老婆聊天
  17. 软件设计师教程笔记整理
  18. MATLAB与信号处理
  19. php如何除去图片水印,如何去掉图片水印,一键去除文字logo图片水印更简单
  20. Android-使用StaticLayout实现icon跟随TextView末尾效果

热门文章

  1. 随机森林与梯度提升树
  2. 到底多大才算高并发?
  3. PHP使用Charles抓包手机
  4. PHP算法对获取用,连接的字符串用in进行sql查询的php处理方法
  5. JQUERY的location.href.split
  6. Linux的Nginx四:功能|模块
  7. python和对象复习_面向对象阶段复习
  8. 本地通过域名访问虚拟机的网站部署方法(Nginx)
  9. 微信小程序时间转换成时间戳、获取当前时间戳、获取当前时间、时间戳加减
  10. php获取日期中的月份,年份