【发布时间】:2015-02-28 19:25:26
【问题描述】:
我必须从结构化二进制文件中读取数百万条记录。在阅读时,我想将数据转换为更有用的内存布局。每条记录都很大。总文件大小约为 30GB。
我可以使用numpy.fromfile,但是我正在运行的系统有足够的内存仅用于一个完整数组,因此我无法加载整个文件,然后将所有内容复制到最终数组中在内存中,然后销毁最初加载的数组。
我也可以使用numpy.fromfile 来读取块,但我担心numpy.fromfile 每次都会创建和销毁一个新数组,而不是重用缓冲区数组。我还没有对此进行测试,但我怀疑这会导致一些严重的内存峰值和缓慢的垃圾收集。
如果这适用:文件是通过 infiniband 加载的,并且我在其上运行的分析需要我多次循环整个数据集。我将 Cython 用于这些循环,因此欢迎任何可以提供帮助的 C 代码,但我更愿意在 Python 中完成。
【问题讨论】:
-
听起来您需要为内存映射文件创建代理。
标签: python memory-management numpy buffer binaryfiles