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

时间:2015-11-27 21:31:26

标签: python python-3.x pickle textblob

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

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

可以腌制处理这么大的文件,还是会遇到内存问题?

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

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

2 个答案:

答案 0 :(得分:9)

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

以下是一些初步想法:

  1. Pickle模块没有固有的大小限制,但是你正在推动其预期用途的界限。它不是为单个大型物体设计的。但是,自从您使用Python 3.5以来,您将能够利用PEP 3154,从而为大型对象提供更好的支持。您pickle.HIGHEST_PROTOCOL数据时应指定dump

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

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

  4. 作为pal sch's comment shows,Pickle对酸洗过程中的RAM消耗不是很友好,所以你可能不得不处理Python试图从操作系统获得比我们预期的1.5GB更多的内存为你的对象。

  5. 考虑到这些因素,我不希望它能够很好地为您服务。我强烈建议升级目标计算机上的RAM以使其正常工作。

答案 1 :(得分:2)

我不知道你怎么能load一个超过RAM的RAM对象。即bytes(num_bytes_greater_than_ram)将始终提出MemoryError