是否有一个不需要文件的备忘录的Pickler

时间:2013-05-16 22:00:26

标签: python multiprocessing pickle

我们在python中有一个有趣的Pickler用例。我们正在使用具有对象引用的对象进行多处理。

在这个question about pickling member objects中,您可以看到Pickler使用其备忘录来加载原始对象而不是构建新对象。有没有办法在没有Pickling到文件的情况下使用Pickler及其备忘录?

使用示例:( A,B,C都有智能哈希和eq)

  1. 主人使用子对象B腌制对象A并将A发送到单独的进程
  2. 子进程返回一个也可能有对象B
  3. 的Picked对象C.
  4. 主人取消了C,它足够聪明,可以引用B而不是制作副本
  5. 用cpickle做这一切怎么样?

1 个答案:

答案 0 :(得分:0)

dumpsloads个函数使用字符串

>>> from cPickle import dumps, loads
>>> d={'foo': 'bar'}
>>> dumps(d)
"(dp1\nS'foo'\np2\nS'bar'\np3\ns."
>>> loads(_)
{'foo': 'bar'}

您还可以将dump / loadStringIO对象一起使用

>>> from cPickle import dump, load
>>> from cStringIO import StringIO
>>> S=StringIO()
>>> d={'foo': 'bar'}
>>> dump(d, S)
>>> S
<cStringIO.StringO object at 0x20c3960>
>>> S.seek(0)
>>> load(S)
{'foo': 'bar'}