【问题标题】:How is dill different from Python's pickle module?dill 与 Python 的 pickle 模块有何不同?
【发布时间】:2019-10-01 22:36:20
【问题描述】:

我的 Python3 代码中有一个大对象,当尝试使用 pickle 模块进行腌制时会引发以下错误:

TypeError: cannot serialize '_io.BufferedReader' object

但是,dill.dump()dill.load() 能够无缝地保存和恢复对象。

  1. pickle 模块出现问题的原因是什么?
  2. 既然dill 保存并重建对象没有任何错误,有没有办法验证dill 的酸洗和解酸是否顺利?
  3. 怎么可能pickle 失败,而dill 成功?

【问题讨论】:

  • TL;DR: pickle 不像 dill 那样处理函数或复杂对象。我使用dill 进行所有数据科学酸洗,因为模型和对象非常深入和复杂
  • Dill 也是建立在 pickle 之上的,但和上面一样,它是为 pickle 无法成功的复杂对象而设计的。

标签: python python-3.x pickle dill


【解决方案1】:

我是dill 作者。

1) 最简单的方法是查看这个文件:https://github.com/uqfoundation/dill/blob/master/dill/_objects.py,它列出了 pickle 可以序列化的内容,以及 dill 可以序列化的内容。

2) 您可以尝试dill.copydill.checkdill.pickles 来检查不同级别的酸洗和解酸。 dill 还包含更多用于检测和诊断dill.detectdill.pointers 中的序列化问题的实用程序。

3) dill 建立在 pickle 之上,并通过注册新的序列化函数对其进行扩充。

4) dill 包括序列化变体,使用户能够从不同的对象依赖序列化策略中进行选择(在 dill.settings 中)——包括源代码提取和对象重构 dill.source(以及标准库的扩展 @987654336 @模块)。

【讨论】:

    猜你喜欢
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 2021-07-09
    相关资源
    最近更新 更多