测量加载大型obj后堆大小的增加

2024-10-02 20:34:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我感兴趣的是,当加载一个大对象时,python堆的总大小会增加多少。健康似乎是我需要的,但我不明白结果。在

我有一个350MB的pickle文件,其中包含一个pandasDataFrame,其中包含大约250万个条目。当我加载文件并随后用heapy检查堆时,它报告只有大约8MB的对象被添加到堆中。在

import guppy
h = guppy.hpy()
h.setrelheap()
df = pickle.load(open('test-df.pickle'))
h.heap()

这将产生以下输出:

^{pr2}$

让我困惑的是Total size8694448 bytes。只有8MB。在

为什么Total size不能反映整个DataFramedf的大小?在

(使用python2.7.3,heapy0.1.10,Linux 3.2.0-48-generic-pae(Ubuntu),i686)


Tags: 文件对象importdfsize报告条目pickle
2条回答

当我试图找出为什么我的500mbcsv文件占用了5gb的内存时,我也遇到了类似的问题。熊猫基本上构建在Numpy之上,因此使用C malloc来分配空间。这就是为什么它没有出现在heapy中,heapy只描述纯Python对象。一个解决方案可能是研究valgrind来追踪你的内存泄漏。在

你可以试试pympler,这在我上次检查的时候很有用。如果您只是对总内存的增加感兴趣,而不是对某个特定的类感兴趣,那么您可以通过一个特定于操作系统的调用来获得所使用的总内存。例如,在基于unix的操作系统上,可以在加载对象之前和之后执行以下操作以获得差异

resource.getrusage(resource.RUSAGE_SELF).ru_maxrss

相关问题 更多 >