Pickle 可以处理大于我机器上安装的 RAM 的文件吗?

Can Pickle handle files larger than the RAM installed on my machine?

我正在使用 pickle 将我使用 TextBlob 库构建的 NLP 分类器保存在磁盘上。

经过大量与 相关的搜索后,我正在使用 pickle。目前我在本地工作,用我的 i7 和 16gb RAM 机器加载 pickle 文件(1.5Gb)没有问题。但我的想法是,我的程序将来必须 运行 在我的服务器上,它只安装了 512Mb RAM。

pickle 可以处理这么大的文件吗?我会遇到内存问题吗?

在我的服务器上,我安装了 Python 3.5,它是一个 Linux 服务器(不确定是哪个发行版)。

我问是因为目前我无法访问我的服务器,所以我不能只是尝试找出发生了什么,但同时我怀疑我是否可以保留这种方法或我必须找到其他解决方案。

不幸的是,如果不在您的机器上进行测试,很难准确回答这个问题。

以下是一些初步想法:

  1. Pickle 模块没有强制执行的固有大小限制,但您正在突破其预期用途的界限。它不是为单个大型对象设计的。但是,由于您使用的是 Python 3.5,因此您将能够利用 PEP 3154 which adds better support for large objects. You should specify pickle.HIGHEST_PROTOCOL when you dump 您的数据。

  2. 您的性能可能会受到很大影响,因为您要处理的对象是内存大小的 3 倍。您的系统可能会开始交换,甚至可能会出现抖动。如今 RAM 如此便宜,将其提高到至少 2GB 应该会有很大帮助。

  3. 要处理交换,请确保您有足够的可用交换 space(如果您在 Linux 上,则需要一个大的交换分区,或者有足够的 space Windows).

  4. 主分区上的交换文件
  5. 一样,Pickle在酸洗过程中对RAM消耗不是很友好,所以你可能不得不处理Python试图从中获取更多内存OS 比我们预期您的对象的 1.5GB 还要多。

考虑到这些因素,我不希望它对你很好。我强烈建议升级目标计算机上的 RAM 以使其正常工作。

我不明白你怎么能 load 一个超过 RAM 的对象进入 RAM。即 bytes(num_bytes_greater_than_ram) 将始终引发 MemoryError.