0

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

在这个关于酸洗成员对象的问题中,您可以看到 Pickler 使用它的备忘录来加载原始对象而不是构建新对象。有什么方法可以在没有 Pickling 的情况下使用 Pickler 及其备忘录?

使用示例:(A、B、C 都有 smart hash 和 eq)

  1. 主人用子对象 B 腌制对象 A 并将 A 发送到单独的进程
  2. 子进程返回一个 Picked 对象 C,它可能也有对象 B
  3. 主人解开 C 并且它足够聪明地引用 B 而不是复制

用 cpickle 做这一切怎么样?

4

1 回答 1

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'}
于 2013-05-16T22:02:14.030 回答