Python中pickle的常见用例

2024-04-25 05:08:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我看过pickle文档,但我不知道pickle在哪里有用。

pickle的一些常见用例是什么?


Tags: 文档用例pickle
3条回答

我发现了一些用途:

1)将程序的状态数据保存到磁盘上,以便在重新启动时继续执行中断的操作(持久性)

2)在多核或分布式系统中通过TCP连接发送python数据(编组)

3)将python对象存储在数据库中

4)将任意python对象转换为字符串,以便它可以用作字典键(例如用于缓存和记忆)。

最后一个对象有一些问题-两个相同的对象可以被pickle并导致不同的字符串-甚至同一个对象被pickle两次可以有不同的表示。这是因为pickle可以包含引用计数信息。

为了强调@lunaryorn的注释,您永远不应该从不受信任的源中取消对字符串的绑定,因为精心编制的pickle可以在您的系统上执行任意代码。例如,请参见https://blog.nelhage.com/2011/03/exploiting-pickle/

最小往返示例。。

>>> import pickle
>>> a = Anon()
>>> a.foo = 'bar'
>>> pickled = pickle.dumps(a)
>>> unpickled = pickle.loads(pickled)
>>> unpickled.foo
'bar'

编辑:但是关于实际酸洗示例的问题,可能最先进的酸洗用法(您必须深入挖掘来源)是ZODB: http://svn.zope.org/

否则,PyPI会提到几个: http://pypi.python.org/pypi?:action=search&term=pickle&submit=search

我个人见过几个pickled对象通过网络发送的示例,它们是一个易于使用的网络传输协议。

我在我的一个项目中使用过它。如果应用程序在工作期间被终止(它执行了一个冗长的任务并处理了大量数据),我需要保存整个数据结构,并在应用程序再次运行后重新加载它。我使用了cPickle,因为速度是一个关键因素,数据量非常大。

相关问题 更多 >