eri*_*ich 4 python memory-management numpy lazy-evaluation
我有一个Python程序来处理相当大的NumPy数组(数百兆字节),这些数组存储在pickle文件的磁盘上(每个文件一个~100MB数组).当我想对数据运行查询时,我通过pickle加载整个数组,然后执行查询(这样从Python程序的角度来看整个数组都在内存中,即使操作系统正在交换它) .我这样做主要是因为我相信能够在NumPy阵列上使用矢量化操作比在每个项目中使用for循环要快得多.
我在一台Web服务器上运行它,它有一个内存限制,我很快就遇到了.我在数据上运行了许多不同类型的查询,因此编写"分块"代码,从单独的pickle文件加载部分数据,处理它们,然后进入下一个块可能会增加很多复杂性.对于处理这些大型数组的任何函数来说,最好使这个"分块"透明.
似乎理想的解决方案就像一个生成器,它定期从磁盘加载一块数据,然后逐个传递数组值.这将大大减少程序所需的内存量,而不需要对各个查询功能进行任何额外的工作.可以这样做吗?