我看过pickle文档,但我不明白pickle在哪里有用。
泡菜的一些常见用例是什么?
发布于 2010-08-09 20:21:54
我遇到的一些用法:
1)将程序的状态数据保存到磁盘上,以便在重启时可以在中断的地方继续(持久化)
2)在多核或分布式系统中通过TCP连接发送python数据(编组)
3)在数据库中存储python对象
4)将任意python对象转换为字符串,以便可以将其用作字典键(例如,用于缓存和记忆)。
最后一种方法有一些问题--两个相同的对象可能会产生不同的字符串--甚至两次相同的对象可能会有不同的表示。这是因为pickle可以包括引用计数信息。
强调@lunaryorn的评论-你永远不应该解开来自不可信来源的字符串,因为精心制作的pickle可能会在你的系统上执行任意代码。例如,请参阅https://blog.nelhage.com/2011/03/exploiting-pickle/
发布于 2010-08-09 17:34:04
我在我的一个项目中使用了它。如果应用程序在运行过程中被终止(它做了一个冗长的任务并处理了大量数据),我需要保存整个数据结构,并在应用程序再次运行后重新加载它。为此,我使用了cPickle,因为速度是至关重要的,而且数据量非常大。
发布于 2013-10-14 20:31:16
酸洗对于分布式和并行计算来说是绝对必要的。
假设您想使用multiprocessing
(或使用pyina跨集群节点)执行并行map-reduce,那么您需要确保您希望跨并行资源映射的函数将被pickle。如果它不泡菜,你就不能把它发送给另一个进程、计算机等上的其他资源。另请参阅here以获得一个很好的例子。
为此,我使用了dill,它可以序列化python中的几乎任何内容。Dill还提供了some good tools,可以帮助您理解在代码失败时是什么原因导致酸洗失败。
是的,人们使用picking来保存计算的状态,或者你的ipython会话,或者其他任何东西。
https://stackoverflow.com/questions/3438675
复制相似问题