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

时间:2022-10-09 06:13:10 

去年自己写过一个程序时,不太确定自己的内存使用量,就想找写工具来打印程序或函数的内存使用量。
这里将上次找到的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.py

Line #    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,内存检测工具
0
投稿

猜你喜欢

  • 记得使用try+catch

    2010-01-29 12:48:00
  • matplotlib 范围选区(SpanSelector)的使用

    2023-08-22 14:34:56
  • 在Recordset对象中查询记录的方法

    2008-11-20 16:51:00
  • 深入解析Python编程中JSON模块的使用

    2022-11-30 00:21:27
  • python正则匹配查询港澳通行证办理进度示例分享

    2021-05-09 19:29:55
  • 苹果Macbook Pro13 M1芯片安装Pillow的方法步骤

    2021-01-11 18:23:46
  • js为什么[]==![]是成立的吗

    2024-04-10 16:10:34
  • sqlserver2017共享功能目录路径不可改的解决方法

    2024-01-17 13:58:26
  • python 存储json数据的操作

    2022-10-02 13:14:14
  • Windows下ORACLE 10g完全卸载的方法分析

    2024-01-21 16:51:32
  • Python3简单爬虫抓取网页图片代码实例

    2021-08-28 21:56:49
  • Go语言中int、float、string类型之间相互的转换

    2024-02-03 04:32:55
  • python字符串操作的15种方法汇总

    2023-10-27 00:40:34
  • django实现用户注册实例讲解

    2022-06-23 08:05:53
  • oracle数据库在客户端建立dblink语法

    2023-07-14 19:51:23
  • Python人工智能之混合高斯模型运动目标检测详解分析

    2021-11-01 21:28:43
  • asp如何利用当前时间生成随机函数?

    2010-01-01 15:44:00
  • 解决bootstrap导航栏navbar在IE8上存在缺陷的方法

    2023-09-03 10:55:07
  • golang API开发过程的中的自动重启方式(基于gin框架)

    2024-02-03 02:56:48
  • 利用Python如何生成便签图片详解

    2021-01-02 18:09:52
  • asp之家 网络编程 m.aspxhome.com