我正在尝试将netCDF4包与python一起使用。我正在摄取接近20mil的数据记录,每个记录28字节,然后我需要将数据写入netCDF4文件。昨天,我试着一次完成所有这些,在执行了一个小时左右之后,python停止运行代码,并显示了非常有用的错误消息:
Killed.
无论如何,对数据的子部分执行此操作,很明显,在2,560,000条记录和5,120,000条记录之间的某处,代码没有足够的内存,必须开始交换。当然,性能大大降低。两个问题:1)有人知道如何使这项工作更有效吗?我正在考虑的一件事是以某种方式将数据的子部分增量地放入,而不是一次完成。有人知道怎么做吗?2)我假设“已杀死”消息发生在内存最终耗尽时,但我不知道。有人能解释一下吗?
谢谢。
附录:netCDF4提供了这个问题的答案,你可以在我给出的我自己的问题的答案中看到。所以现在,我可以向前看了。但还有一个问题netCDF4的答案不适用于netCDF3,而且netCDF3还没有消失。有谁知道如何在netCDF3框架中解决这个问题?再次感谢。
3条答案
按热度按时间mspsb9vt1#
如果没有看到代码,很难判断你在做什么,但是你可以尝试使用
sync
命令,在一些数据被写入文件后,将内存中的数据刷新到磁盘:http://netcdf4-python.googlecode.com/svn/trunk/docs/netCDF4.Dataset-class.html
zd287kbt2#
在netCDF4中有一个现成的答案:使用指定的“chunksize”声明netCDF4变量。我用了10000,一切都进行得很顺利。正如我在编辑我的答案时所指出的,我想在netCDF3中找到一种方法来解决这个问题,因为netDF3还远没有死。
mklgxw1f3#
下面的解决方案可以创建大小超过2 GB的文件。但是,您不能读取s3存储桶中的netcdf3文件,因此这个答案的用途有限。如果你像下面这样不限制时间,那么你可以在每个时间步添加数据,而不会使你的内存崩溃。我想知道“chunksize”解决方案是否可以创建大于2GB的文件。