使用 Pickle 序列化大型对象 - 导致'Memory error'的原因



我正在pickle一个非常大的类(无论是属性还是原始大小)。我一直在采摘,用泡菜没有问题。直到我达到不到4GB,现在我一直得到"内存错误"。我也尝试过使用json。dump(我得到' not JSON serializable'错误)。我也尝试过Hickle,但我得到与Hickle相同的错误,因为我做Pickle。

我不能在这里发布所有的代码(它很长),但本质上它是一个类,保存另一个类的值的字典-像这样:

class one:
def __init__(self):
self.somedict = {}
def addItem(self,name,item)
self.somedict[name] = item
class two:
def __init__(self):
self.values = [0]*100

其中name是字符串,item是类two对象的实例。

有更多的代码,但这是绝大多数内容保存的地方。是否存在可靠且理想的快速解决方案来将此对象保存到文件中,然后能够在以后重新加载它。我每隔几千次迭代就保存一次(作为备份,以防出现问题,所以我需要它相当快)。

谢谢!

编辑# 1:

我只是想在我的系统中包含一些细节可能会有用。我有64Gb的内存-所以我不认为pickle一个3-4GB的文件应该导致这种类型的问题(尽管我可能是错误的!)。

您可能先检查了这个,但以防万一:您是否确保您的Python安装是64位的?3-4GB立刻让我想起了32位应用程序的内存限制。

我发现这个资源对于分析和解决Python中一些更常见的内存相关问题非常有用。

最新更新