对象大于RAM

时间:2016-01-27 01:14:00

标签: python dictionary memory pickle ram

我现在正在编写Python代码,逐渐构建一个大字典(6亿个元素),同时不断阅读dict。我经常使用cPickle将该对象写入文件,然后通过从文件中读取来中断我从中断的位置。

当它完成时,字典将占用大约40 GB。我的电脑有16 GB的RAM。我应该期待什么样的行为?内存错误?冷冻电脑?访问字典非常慢?

此外,我正在尝试修复我的备用实现(NumPy数组而不是字典),预计只需要5 GB,但也要运行大约三倍。我是否纠正了持续的内存访问,同时保持在16 GB以内会使NumPy版本实际运行得更快?

2 个答案:

答案 0 :(得分:2)

在某一刻你将耗尽RAM,你的代码将崩溃。

在您到达该阶段之前,您的系统可能会因为开始交换而放慢速度。

对于如此大量的数据,你应该使用能够存储数据而不需要全部保存在内存中的东西,例如数据库(sqlite很容易入手)。

另一个警告:如果你的源数据在某个文件中并且具有一定的大小,那么期望Python需要更多的内存来处理它,因为它必须为它创建一些结构(如字典)。

答案 1 :(得分:0)

你可以在现代操作系统上耗尽RAM吗?

如果你有16Gb,可用的少,因为操作系统正在使用一些。但是,虚拟内存应该会更大,但性能可能会受到影响。