IPython会话期间内存中对象的大小(使用Guppy?)
我记得在Python中很难确定对象的确切内存使用情况。但是,该线程来自2009年,从那以后,我已经阅读了Python中的各种内存分析器(参见中的示例)。此外,IPython在最近几个月已经相当成熟(1.0版在几天前发布) IPython已经有了一个名为IPython会话期间内存中对象的大小(使用Guppy?),python,memory-management,ipython,heapy,guppy,Python,Memory Management,Ipython,Heapy,Guppy,我记得在Python中很难确定对象的确切内存使用情况。但是,该线程来自2009年,从那以后,我已经阅读了Python中的各种内存分析器(参见中的示例)。此外,IPython在最近几个月已经相当成熟(1.0版在几天前发布) IPython已经有了一个名为whos的魔法,它可以打印变量名、类型和一些基本数据/信息 以类似的方式,是否有任何方法可以获取who ? 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以澄清这一点。