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 10 Python
windows下安装python paramiko模块的代码
Feb 10 Python
Python中zip()函数用法实例教程
Jul 31 Python
Python配置mysql的教程(推荐)
Oct 13 Python
Django实现快速分页的方法实例
Oct 22 Python
详解Python网络框架Django和Scrapy安装指南
Apr 01 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
Jul 15 Python
Python编程学习之如何判断3个数的大小
Aug 07 Python
python开头的coding设置方法
Aug 08 Python
Python猴子补丁知识点总结
Jan 05 Python
Django实现前台上传并显示图片功能
May 29 Python
Python使用for生成列表实现过程解析
Sep 22 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实现单例模式建立数据库连接的方法分析
2020/02/11 PHP
jQuery队列控制方法详解queue()/dequeue()/clearQueue()
2010/12/02 Javascript
js性能优化 如何更快速加载你的JavaScript页面
2012/03/17 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
2013/04/08 Javascript
用jquery实现输入框获取焦点消失文字
2013/04/27 Javascript
浅谈checkbox的一些操作(实战经验)
2013/11/20 Javascript
让input框实现类似百度的搜索提示(基于jquery事件监听)
2014/01/31 Javascript
jquery中checkbox使用方法简单实例演示
2015/11/24 Javascript
bootstrap可编辑下拉框jquery.editable-select
2017/10/12 jQuery
JS简单实现滑动加载数据的方法示例
2017/10/18 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
2020/11/16 Javascript
jQuery实现全选按钮
2021/01/01 jQuery
[02:56]DOTA2矮人直升机 英雄基础教程
2013/11/26 DOTA
Python开发实例分享bt种子爬虫程序和种子解析
2014/05/21 Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
2016/01/20 Python
ansible作为python模块库使用的方法实例
2017/01/17 Python
解决python2.7用pip安装包时出现错误的问题
2017/01/23 Python
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
TensorFlow实现Softmax回归模型
2018/03/09 Python
python对list中的每个元素进行某种操作的方法
2018/06/29 Python
【python】matplotlib动态显示详解
2019/04/11 Python
python 连续不等式语法糖实例
2020/04/15 Python
python的launcher用法知识点总结
2020/08/07 Python
浅谈HTML5 &amp; CSS3的新交互特性
2016/07/19 HTML / CSS
英国地毯卖家:The Rug Seller
2019/07/18 全球购物
人力资源行政经理自我评价
2013/10/23 职场文书
社区党员志愿服务活动方案
2014/08/18 职场文书
医学检验专业自荐信
2014/09/18 职场文书
谢师宴邀请函
2015/02/02 职场文书
2015年复活节活动总结
2015/02/27 职场文书
2015年酒店客房部工作总结
2015/04/25 职场文书
2016年会开场白台词
2015/06/01 职场文书
承兑汇票延期证明
2015/06/23 职场文书
创业计划书之儿童理发店
2019/09/27 职场文书
MySQL8.0 Undo Tablespace管理详解
2022/06/16 MySQL