出于某种原因,我需要将对象pickle到多个文件中。这些pickle之间共享的对象当然会作为不同的对象取消pickle
a = [1, 2, 3]
b = [1, 2, a]
assert a is b[2]
aa = pickle.loads(pickle.dumps(a))
bb = pickle.loads(pickle.dumps(b))
assert aa is bb[2] # AssertionError
This post有一个自定义用户类的答案,但我正在寻找一种适用于任何可拾取对象的方法,因此它需要是非侵入性的
这是我到目前为止的示例框架代码:
class Writer:
def __init__(self):
self.objids = set() # To remember what have been pickled.
def write(self, objs, files):
for obj, file in zip(objs, files):
with open(file, "wb") as f:
MyPickler(f, self).dump(obj)
class Reader:
def __init__(self):
self.restored = {} # To buffer restored objects for later use
def read(self, files):
for file in files:
with open(file, "rb") as f:
MyUnpickler(f, self).load()
class MyPickler(pickle.Pickler):
def __init__(self, file, writer):
super().__init__(file)
self.writer = writer
class MyUnpickler(pickle.Unpickler):
def __init__(self, file, reader):
super().__init__(file)
self.reader = reader
if __name__ == "__main__":
files = ["a_pickle", "b_pickle"]
Writer().write([a, b], files)
rd = Reader()
rd.read(files)
我已经尝试实现了reducer_override
(在python3.8中是新的)或persistent_id
和persistent_load
方法
在MyPickler/MyUnpickler
中,但没有成功
请注意,我不需要保留活动对象和未勾选对象之间的标识。我只需要Reader/Writer
同时进行pickle和unpickle的对象之间的标识一致性
目前没有回答
相关问题 更多 >
编程相关推荐