Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IPython会话期间内存中对象的大小(使用Guppy?)_Python_Memory Management_Ipython_Heapy_Guppy - Fatal编程技术网

IPython会话期间内存中对象的大小(使用Guppy?)

IPython会话期间内存中对象的大小(使用Guppy?),python,memory-management,ipython,heapy,guppy,Python,Memory Management,Ipython,Heapy,Guppy,我记得在Python中很难确定对象的确切内存使用情况。但是,该线程来自2009年,从那以后,我已经阅读了Python中的各种内存分析器(参见中的示例)。此外,IPython在最近几个月已经相当成熟(1.0版在几天前发布) IPython已经有了一个名为whos的魔法,它可以打印变量名、类型和一些基本数据/信息 以类似的方式,是否有任何方法可以获取who ? IPython中已有任何用于此目的的实用程序 使用孔雀鱼 (中建议的)有一个命令,允许用户获取每个对象类型的累积内存使用量,但不幸的是: 它

我记得在Python中很难确定对象的确切内存使用情况。但是,该线程来自2009年,从那以后,我已经阅读了Python中的各种内存分析器(参见中的示例)。此外,IPython在最近几个月已经相当成熟(1.0版在几天前发布)

IPython已经有了一个名为
whos
的魔法,它可以打印变量名、类型和一些基本数据/信息

以类似的方式,是否有任何方法可以获取
who
? IPython中已有任何用于此目的的实用程序

使用孔雀鱼 (中建议的)有一个命令,允许用户获取每个对象类型的累积内存使用量,但不幸的是:

  • 它不显示每个对象的内存使用情况
  • 它以字节为单位打印大小(不是人类可读的格式)
  • 对于第二种方法,可以从中应用
    bytes2human
    ,但我需要首先以可以解析的格式收集
    h.heap()
    的输出

    但是对于第一个(最重要的一个),有没有办法让Guppy显示每个对象的内存使用情况

    In [6]: import guppy
    
    In [7]: h = guppy.hpy()                                                                                                                                     
    
    In [8]: h.heap()
    Out[8]: 
    Partition of a set of 2871824 objects. Total size = 359064216 bytes.
     Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
         0 522453  18 151469304  42 151469304  42 dict (no owner)
         1 451503  16 36120240  10 187589544  52 numpy.ndarray
         2 425700  15 34056000   9 221645544  62 sklearn.grid_search._CVScoreTuple
         3 193439   7 26904688   7 248550232  69 unicode
         4 191061   7 22696072   6 271246304  76 str
         5 751128  26 18027072   5 289273376  81 numpy.float64
         6  31160   1 12235584   3 301508960  84 list
         7 106035   4  9441640   3 310950600  87 tuple
         8   3300   0  7260000   2 318210600  89 dict of 0xb8670d0
         9   1255   0  3788968   1 321999568  90 dict of module
    <1716 more rows. Type e.g. '_.more' to view.>
    
    [6]中的
    :导入孔雀鱼
    在[7]中:h=guppy.hpy()
    [8]:h.heap()
    出[8]:
    一组2871824个对象的分区。总大小=359064216字节。
    索引计数%Size%累计%Kind(类/类的目录)
    0 522453 18 151469304 42 151469304 42 dict(无所有者)
    1451503 16 36120240 10 187589544 52努比·恩达雷
    2 425700 15 34056000 9 221645544 62 sklearn.grid\u search.\u CVScoreTuple
    3 193439 7 26904688 7 24850232 69 unicode
    4191061 7 22696072 6 271246304 76街
    5 751128 26 18027072 5 289273376 81努比
    631160112235584 3 301508960 84列表
    7 106035 4 9441640 3 310950600 87元组
    8 3300 0 7260000 2 31821060 89 0xb8670d0的指令
    9 1255 0 3788968 1 321999568 90模块目录
    
    为什么不使用类似于:

    h.heap().byid
    
    但这只会显示即时大小(即,不包括可能引用的其他列表在内的列表的总大小)

    如果您希望获得特定对象的大小,可以使用:

    h.iso(object).domisize
    

    查找删除后将释放的大致内存量。

    。。。等待:您想知道
    522453
    dict
    实例、
    451503
    numpy.ndarray
    实例等每个实例的大小吗?抱歉,没有任何库/分析器可以这样做。我还要指出,例如,关于
    numpy.ndarray
    的信息将是错误的,因为
    numpy
    不使用
    PyMem\u MALLOC
    ,而是直接使用
    MALLOC
    (因此,每个不知道numpy的配置文件都无法正确检查数组的大小)。@Bakuriu,不完全如此,我想知道当前帧中没有递归的每个对象的大小(即IPython中
    who
    列出的对象)。刚刚更新了OP以澄清这一点。