加载大对象后测量堆大小的增加

rod*_*ion 6 python pandas heapy

我很想知道加载大对象时python堆总大小的增加.很多似乎是我需要的,但我不明白结果.

我有一个350 MB的pickle文件DataFrame,里面有一个pandas ,其中包含大约250万个条目.当我加载文件并在之后使用heapy检查堆时,它会报告只有大约8 MB的对象已添加到堆中.

import guppy
h = guppy.hpy()
h.setrelheap()
df = pickle.load(open('test-df.pickle'))
h.heap()
Run Code Online (Sandbox Code Playgroud)

这给出了以下输出:

Partition of a set of 95278 objects. Total size = 8694448 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0  44700  47  4445944  51   4445944  51 str
     1  25595  27  1056560  12   5502504  63 tuple
     2   6935   7   499320   6   6001824  69 types.CodeType
...
Run Code Online (Sandbox Code Playgroud)

是什么让我困惑的是Total size8694448 bytes.那只是8 MB.

为什么不Total size反映整体的大小DataFrame df

(使用python 2.7.3,heapy 0.1.10,Linux 3.2.0-48-generic-pae(Ubuntu),i686)

ami*_*mit 1

您可以尝试pympler,它在我上次检查时对我有用。如果您只对总内存增加感兴趣而不是对特定类感兴趣,则可以进行特定于操作系统的调用来获取使用的总内存。例如,在基于 UNIX 的操作系统上,您可以在加载对象之前和之后执行类似以下操作来获取差异。

resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
Run Code Online (Sandbox Code Playgroud)