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 相关文章推荐
Python3实现的旋转矩阵图像算法示例
Apr 03 Python
python实现对象列表根据某个属性排序的方法详解
Jun 11 Python
详解如何用TensorFlow训练和识别/分类自定义图片
Aug 05 Python
对Django中的权限和分组管理实例讲解
Aug 16 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
Aug 19 Python
Pycharm 字体大小调整设置的方法实现
Sep 27 Python
Python flask框架实现查询数据库并显示数据
Jun 04 Python
python怎么删除缓存文件
Jul 19 Python
Python安装并操作redis实现流程详解
Oct 13 Python
python regex库实例用法总结
Jan 03 Python
Python 制作自动化翻译工具
Apr 25 Python
Python快速优雅的批量修改Word文档样式
May 20 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
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
smarty中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
PHP 超级全局变量相关总结
2020/06/30 PHP
jQuery 位置插件
2008/12/25 Javascript
javascript 冒号 使用说明
2009/06/06 Javascript
JavaScript中的undefined学习总结
2013/11/30 Javascript
jQuery动态改变图片显示大小(修改版)的实现思路及代码
2013/12/24 Javascript
JavaScript通过正则表达式实现表单验证电话号码
2014/03/07 Javascript
jQuery判断元素上是否绑定了指定事件的方法
2015/03/17 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
2015/12/22 Javascript
js模糊查询实例分享
2016/12/26 Javascript
javascript实现二叉树遍历的代码
2017/06/08 Javascript
Vue.js中extend选项和delimiters选项的比较
2017/07/17 Javascript
浅谈angular2 组件的生命周期钩子
2017/08/12 Javascript
vue项目中使用axios上传图片等文件操作
2017/11/02 Javascript
VUE预渲染及遇到的坑
2018/09/03 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
vue-cli项目使用mock数据的方法(借助express)
2019/04/15 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
[02:36]DOTA2英雄基础教程 一击致命幻影刺客
2013/12/06 DOTA
[01:27:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第一场 1月24日
2021/03/11 DOTA
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
Opodo英国旅游网站:预订廉价航班、酒店和汽车租赁
2018/07/14 全球购物
Linux的文件类型
2016/07/05 面试题
机电一体化专业应届本科生求职信
2013/09/27 职场文书
市级三好学生事迹材料
2014/08/27 职场文书
助学金感谢信
2015/01/20 职场文书
2016简历自荐信优秀范文
2016/01/29 职场文书