我感兴趣的是,当加载一个大对象时,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 size
的8694448 bytes
。只有8MB。在
为什么Total size
不能反映整个DataFrame
df
的大小?在
(使用python2.7.3,heapy0.1.10,Linux 3.2.0-48-generic-pae(Ubuntu),i686)
当我试图找出为什么我的500mbcsv文件占用了5gb的内存时,我也遇到了类似的问题。熊猫基本上构建在Numpy之上,因此使用C malloc来分配空间。这就是为什么它没有出现在heapy中,heapy只描述纯Python对象。一个解决方案可能是研究valgrind来追踪你的内存泄漏。在
你可以试试pympler,这在我上次检查的时候很有用。如果您只是对总内存的增加感兴趣,而不是对某个特定的类感兴趣,那么您可以通过一个特定于操作系统的调用来获得所使用的总内存。例如,在基于unix的操作系统上,可以在加载对象之前和之后执行以下操作以获得差异
相关问题 更多 >
编程相关推荐