我使用pickle将我的NLP分类器保存在磁盘上,使用TextBlob库构建。
我在与this question相关的大量搜索后使用了pickle。目前我在本地工作,使用我的i7和16GB RAM机器加载pickle文件(1.5Gb)没有问题。但我的想法是,我的程序将来必须在我的服务器上运行,该服务器只安装了512Mb RAM。
可以腌制处理这么大的文件,还是会遇到内存问题?
在我的服务器上,我安装了Python 3.5并且它是Linux服务器(不确定哪个发行版)。
我问,因为目前我无法访问我的服务器,所以我不能试着找出会发生什么,但与此同时我很怀疑是否我可以保留这种方法,或者我必须找到其他解决方案。
答案 0 :(得分:9)
不幸的是,如果不在机器上进行测试,很难准确回答。
以下是一些初步想法:
Pickle模块没有固有的大小限制,但是你正在推动其预期用途的界限。它不是为单个大型物体设计的。但是,自从您使用Python 3.5以来,您将能够利用PEP 3154,从而为大型对象提供更好的支持。您pickle.HIGHEST_PROTOCOL数据时应指定dump。
您可能会遇到很大的性能影响,因为您正在尝试处理距离内存大小3倍的对象。您的系统可能会开始交换,甚至可能会发生颠簸。 RAM现在如此便宜,将其提升到至少2GB应该会有很大帮助。
要处理交换,请确保您有足够的可用交换空间(如果您在Linux上使用大型交换分区,或者在Windows主分区上有足够的空间用于交换文件)。
作为pal sch's comment shows,Pickle对酸洗过程中的RAM消耗不是很友好,所以你可能不得不处理Python试图从操作系统获得比我们预期的1.5GB更多的内存为你的对象。
考虑到这些因素,我不希望它能够很好地为您服务。我强烈建议升级目标计算机上的RAM以使其正常工作。
答案 1 :(得分:2)
我不知道你怎么能load一个超过RAM的RAM对象。即bytes(num_bytes_greater_than_ram)
将始终提出MemoryError
。