1

我正在尝试将 netCDF4 包与 python 一起使用。我正在摄取近 2000 万条数据记录,每条 28 字节,然后我需要将数据写入 netCDF4 文件。昨天,我尝试一次完成所有操作,执行一个小时左右后,python 停止运行代码并显示非常有用的错误消息:

Killed.

无论如何,对数据的子部分执行此操作,很明显在 2,560,000 条记录和 5,120,000 条记录之间的某个地方,代码没有足够的内存并且必须开始交换。当然,性能会大大降低。所以有两个问题:1)有人知道如何使这项工作更有效吗?我在想的一件事是以某种方式逐步放入数据的子部分,而不是一次全部完成。有谁知道该怎么做?2)我推测“Killed”消息是在内存最终耗尽时发生的,但我不知道。任何人都可以对此有所了解吗?

谢谢。

附录:netCDF4 提供了这个问题的答案,你可以在我给自己的问题的答案中看到。所以目前,我可以继续前进。但这里有另一个问题:netCDF4 的答案不适用于 netCDF3,而且 netCDF3 也不会消失。任何人都知道如何在netCDF3的框架中解决这个问题?再次感谢。

4

2 回答 2

1

不看代码很难判断你在做什么,但你可以尝试sync在将一些数据写入文件后使用命令将内存中的数据刷新到磁盘:

http://netcdf4-python.googlecode.com/svn/trunk/docs/netCDF4.Dataset-class.html

于 2012-08-03T17:13:13.363 回答
1

netCDF4 中有一个现成的答案:用一些指定的“块大小”声明 netCDF4 变量。我用了10000,一切都进行得很好。正如我在回答的编辑中指出的那样,我也想找到一种在 netCDF3 中解决此问题的方法,因为 netDF3 还远未消亡。

于 2012-08-03T17:32:33.277 回答