2013-05-16 21 views
0

我们在Python中有一个Pickler的有趣用例。我们正在使用对对象进行引用的对象进行多处理。是否有Pickler和备忘录不需要文件

在这question about pickling member objects你可以看到Pickler使用它的备忘录来加载原始对象而不是建立一个新的对象。有没有一些方法可以将pickler与备忘录一起使用,而不用pickling到文件中?

使用例如:(A,B,C都具有智能散列和当量)

  1. 主泡菜具有子对象B的对象A和发送到一个单独的过程
  2. 子进程返回的拍摄对象C也可能有对象B
  3. 主unpickles C和它足够聪明,参考B和不能复印

如何做这一切与cPickle的?

+0

作为排序一个相关的问题是皮克勒在其备忘录足够聪明快速处理成员对象?如果我与会员B和C一起腌制A,会员B腌B两次? – rhaskett

回答

0

存在使用字符串

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

您还可以使用dump/loadStringIO对象dumpsloads功能

>>> 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'} 
+0

检查我链接到的问题中的测试。加载时转储和加载将会创建新的对象。尽管让我玩这个游戏,但StringIO很有意思。 – rhaskett