我想在机器A上序列化,在机器B上反序列化,一个python。这有几个明显的问题:
因此,我的问题是:
发布于 2013-05-13 21:39:34
我不知道你到底想做什么,但你可以试试迪尔。Dill可以序列化和反序列化lambda,我相信在闭包中也适用于lambda。泡菜API是其API的一个子集。要使用它,只需“进口苦菜作为泡菜”,并进行您的业务泡菜的东西。
>>> import dill
>>> testme = lambda x: lambda y:x
>>> _testme = dill.loads(dill.dumps(testme))
>>> testme
<function <lambda> at 0x1d92530>
>>> _testme
<function <lambda> at 0x1d924f0>
>>>
>>> def complicated(a,b):
... def nested(x):
... return testme(x)(a) * b
... return nested
...
>>> _complicated = dill.loads(dill.dumps(complicated))
>>> complicated
<function complicated at 0x1d925b0>
>>> _complicated
<function complicated at 0x1d92570>Dill将其类型注册到pickle注册表中,因此,如果您有一些使用pickle的黑匣子代码,而您不能真正编辑它,那么只需导入dill就可以神奇地使其正常工作,而无需对第三方代码进行猴子操作。或者,如果您希望整个解释器会话以"python映像“的形式通过线路发送,dill也可以这样做。
>>> # continuing from above
>>> dill.dump_session('foobar.pkl')
>>>
>>> ^D
dude@sakurai>$ python
Python 2.7.5 (default, Sep 30 2013, 20:15:49)
[GCC 4.2.1 (Apple Inc. build 5566)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import dill
>>> dill.load_session('foobar.pkl')
>>> testme(4)
<function <lambda> at 0x1d924b0>
>>> testme(4)(5)
4
>>> dill.source.getsource(testme)
'testme = lambda x: lambda y:x\n'您可以轻松地将映像通过ssh发送到另一台计算机,并从您停留的位置开始,只要泡菜的版本兼容性,以及有关python更改和安装的常规警告。如图所示,还可以提取在上一次会话中定义的lambda的源。
Dill还提供了一些好工具,帮助您理解代码失败时是什么原因导致您的酸洗失败。
https://stackoverflow.com/questions/11878300
复制相似问题