【问题标题】:Object Larger Than RAM大于 RAM 的对象
【发布时间】:2016-05-03 19:11:24
【问题描述】:

我现在正在编写 Python 代码,它逐渐构建一个大型字典(6 亿个元素),同时不断地从字典中读取。我经常使用 cPickle 将该对象写入文件,并在因读取文件而中断时从中断处继续。

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

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

【问题讨论】:

  • 期待“数据库安装”;)

标签: python dictionary memory pickle ram


【解决方案1】:

现代操作系统上的 RAM 会用完吗?

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

【讨论】:

    【解决方案2】:

    在某一时刻,你会用完 RAM,你的代码会崩溃。

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

    对于如此大量的数据,您应该使用允许您存储数据而不将所有数据保存在内存中的东西,例如数据库(sqlite 很容易开始)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-24
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      • 2021-08-12
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多