2款Python内存检测工具介绍和使用方法


Posted in Python onJune 01, 2014

去年自己写过一个程序时,不太确定自己的内存使用量,就想找写工具来打印程序或函数的内存使用量。
这里将上次找到的2个内存检测工具的基本用法记录一下,今后分析Python程序内存使用量时也是需要的。

memory_profiler模块(与psutil一起使用)
注:psutil这模块,我太喜欢了,它实现了很多Linux命令的主要功能,如:ps, top, lsof, netstat, ifconfig, who, df, kill, free 等等。
示例代码(https://github.com/smilejay/python/blob/master/py2014/mem_profile.py):

#!/usr/bin/env python'''
Created on May 31, 2014
@author: Jay <smile665@gmail.com>
@description: use memory_profiler module for profiling programs/functions.
'''
from memory_profiler import profile
from memory_profiler import memory_usage
import time
 
@profile
def my_func():
    a = [1] * (10 ** 6)
    b = [2] * (2 * 10 ** 7)
    del b
    return a
 
def cur_python_mem():
    mem_usage = memory_usage(-1, interval=0.2, timeout=1)
    return mem_usage
 
def f(a, n=100):
    time.sleep(1)
    b = [a] * n
    time.sleep(1)
    return b
if __name__ == '__main__':
    a = my_func()
    print cur_python_mem()
    print ""
    print memory_usage((f, (1,), {'n': int(1e6)}), interval=0.5)

运行上面的代码,输出结果为:

jay@Jay-Air:~/workspace/python.git/py2014 $python mem_profile.py
Filename: mem_profile.pyLine #    Mem usage    Increment   Line Contents
================================================
    15      8.0 MiB      0.0 MiB   @profile
    16                             def my_func():
    17     15.6 MiB      7.6 MiB       a = [1] * (10 ** 6)
    18    168.2 MiB    152.6 MiB       b = [2] * (2 * 10 ** 7)
    19     15.6 MiB   -152.6 MiB       del b
    20     15.6 MiB      0.0 MiB       return a
 
[15.61328125, 15.6171875, 15.6171875, 15.6171875, 15.6171875]
[15.97265625, 16.00390625, 16.00390625, 17.0546875, 23.63671875, 23.63671875, 23.640625]

Guppy (使用了Heapy)
Guppy is an umbrella package combining Heapy and GSL with support utilities such as the Glue module that keeps things together.
示例代码(https://github.com/smilejay/python/blob/master/py2014/try_guppy.py):

#!/usr/bin/env python'''
Created on May 31, 2014
@author: Jay <smile665@gmail.com>
@description: just try to use Guppy-PE (useing Heapy) for memory profiling.
'''
 
from guppy import hpy
a = [8] * (10 ** 6)
h = hpy()
print h.heap()
print h.heap().more
print h.heap().more.more

注意其中,要输出更多信息的.more用法。
运行上面的程序,输出结果为:

jay@Jay-Air:~/workspace/python.git/py2014 $python try_guppy.py
Partition of a set of 26963 objects. Total size = 11557848 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0    177   1  8151560  71   8151560  71 list
     1  12056  45   996840   9   9148400  79 str
     2   5999  22   488232   4   9636632  83 tuple
     3    324   1   283104   2   9919736  86 dict (no owner)
     4     68   0   216416   2  10136152  88 dict of module
     5    199   1   210856   2  10347008  90 dict of type
     6   1646   6   210688   2  10557696  91 types.CodeType
     7   1610   6   193200   2  10750896  93 function
     8    199   1   177008   2  10927904  95 type
     9    124   0   135328   1  11063232  96 dict of class
<91 more rows. Type e.g. '_.more' to view.>
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
    10   1045   4    83600   1  11148456  96 __builtin__.wrapper_descriptor
    11    109   0    69688   1  11218144  97 dict of guppy.etc.Glue.Interface
    12    389   1    34232   0  11252376  97 __builtin__.weakref
    13    427   2    30744   0  11283120  97 types.BuiltinFunctionType
    14    411   2    29592   0  11312712  98 __builtin__.method_descriptor
    15     25   0    26200   0  11338912  98 dict of guppy.etc.Glue.Share
    16    108   0    25056   0  11363968  98 __builtin__.set
    17    818   3    19632   0  11383600  98 int
    18     66   0    18480   0  11402080  98 dict of guppy.etc.Glue.Owner
    19     16   0    17536   0  11419616  99 dict of abc.ABCMeta
<81 more rows. Type e.g. '_.more' to view.>
(后面省略了部分输出)

另外,还有一个叫“PySizer”的也是做memory profiling的,不过没怎么维护了。

Python 相关文章推荐
Python 用户登录验证的小例子
Mar 06 Python
python实现ipsec开权限实例
Nov 11 Python
Python查找相似单词的方法
Mar 05 Python
简单介绍Python中用于求最小值的min()方法
May 15 Python
Python之reload流程实例代码解析
Jan 29 Python
Python语言的变量认识及操作方法
Feb 11 Python
对python requests的content和text方法的区别详解
Oct 11 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
Jun 19 Python
Python如何调用外部系统命令
Aug 07 Python
Pandas聚合运算和分组运算的实现示例
Oct 17 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
Dec 09 Python
如何使用Python发送HTML格式的邮件
Feb 11 Python
使用Python的Supervisor进行进程监控以及自动启动
May 29 #Python
python应用程序在windows下不出现cmd窗口的办法
May 29 #Python
python正则表达式re模块详细介绍
May 29 #Python
在python中的socket模块使用代理实例
May 29 #Python
python中stdout输出不缓存的设置方法
May 29 #Python
python两种遍历字典(dict)的方法比较
May 29 #Python
python中常用的各种数据库操作模块和连接实例
May 29 #Python
You might like
php导入导出excel实例
2013/10/25 PHP
使用PHP强制下载PDF文件示例
2014/01/17 PHP
PHPStrom中实用的功能和快捷键大全
2015/09/23 PHP
thinkPHP基于ajax实现的菜单与分页示例
2016/07/12 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
JavaScript聚焦于第一个字段的代码
2010/10/15 Javascript
调试JavaScript中正则表达式中遇到的问题
2015/01/27 Javascript
JS实现图片放大镜效果的方法
2015/02/27 Javascript
Jquery解析json字符串及json数组的方法
2015/05/29 Javascript
基于Flowplayer打造一款免费的WEB视频播放器附源码
2015/09/06 Javascript
JavaScript提升性能的常用技巧总结【经典】
2016/06/20 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
Kindeditor单独调用多图上传实例
2017/07/31 Javascript
详解vue 项目白屏解决方案
2018/10/31 Javascript
vue-cli 首屏加载优化问题
2018/11/06 Javascript
[02:20]DOTA2亚洲邀请赛 IG战队出场宣传片
2015/02/07 DOTA
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
python实现发送和获取手机短信验证码
2016/01/15 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
2017/06/21 Python
python 利用zmail库发送邮件
2020/09/11 Python
Python  Asyncio模块实现的生产消费者模型的方法
2021/03/01 Python
Johnston & Murphy官网: 约翰斯顿·墨菲牛津总统鞋
2018/01/09 全球购物
阿迪达斯法国官方网站:adidas法国
2018/03/20 全球购物
澳大利亚音乐商店:Bava’s Music City
2019/05/05 全球购物
《冬阳童年骆驼队》教学反思
2014/04/15 职场文书
导游个人求职信
2014/04/25 职场文书
汉语言文学毕业求职信
2014/07/17 职场文书
学校关爱留守儿童活动方案
2014/08/27 职场文书
预备党员2014年第四季度思想汇报范文
2014/10/25 职场文书
教师党员个人整改措施
2014/10/27 职场文书
汽车4S店销售经理岗位职责
2015/04/02 职场文书
2015学校六五普法工作总结
2015/04/22 职场文书
行政介绍信范文
2015/05/04 职场文书
初一年级组工作总结
2015/08/12 职场文书
小学中队长竞选稿
2015/11/20 职场文书
python3美化表格数据输出结果的实现代码
2021/04/14 Python