16

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

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

泡菜可以处理这么大的文件还是我会面临内存问题?

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

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

4

2 回答 2

9

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

以下是一些初步的想法:

  1. Pickle 模块没有固有的大小限制,但是您正在突破其预期用途的界限。它不是为单个大型对象设计的。但是,由于您使用的是 Python 3.5,因此您将能够利用PEP 3154,它增加了对大对象的更好支持。转储数据时应指定pickle.HIGHEST_PROTOCOL 。

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

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

  4. 正如pal sch 的评论所示,Pickle 在酸洗过程中对 RAM 消耗不是很友好,因此您可能不得不处理 Python 试图从操作系统获取比我们可能期望的对象 1.5GB 更多的内存。

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

于 2015-11-27T21:50:55.930 回答
2

我看不出如何将对象加载到超过 RAM 的 RAM 中。即bytes(num_bytes_greater_than_ram)总是会提出一个MemoryError.

于 2015-11-27T22:01:26.073 回答