当前位置: 首页 > news >正文

dill:扩展 Python pickle 的序列化库

文章目录

  • dill:扩展 Python pickle 的序列化库
    • 核心能力:覆盖更多类型
    • 与 pickle 的关系
    • 使用方式
    • 适用场景

dill:扩展 Python pickle 的序列化库

dill 是一个基于 pickle 的 Python 序列化库,由 UQ Foundation 维护。它继承了 pickle 的接口设计,同时扩展了对更多 Python 内置类型的支持。目前该项目在 GitHub 上获得了约 2,440 个 Star。

核心能力:覆盖更多类型

Python 标准库中的 pickle 模块已经能够处理常见的数据类型,但面对某些特殊对象时会受限。dill 的目标是尽可能覆盖 Python 的内置类型体系。

它支持序列化的标准类型包括:None、type、bool、int、float、complex、bytes、str、tuple、list、dict、file、buffer、builtin、Python 类、namedtuple、dataclass、元类、类实例、set、frozenset、array、函数、异常等。

对于一些更特殊的类型,dill 也能处理:含 yield 的生成器函数、嵌套函数、lambda 表达式、cell、method、module、code 对象、methodwrapper、dictproxy、slice、ellipsis 等。

目前仍不支持的类型有 frame、generator 和 traceback。这个覆盖范围在同类工具中已经相当全面。

与 pickle 的关系

dill 的设计定位是 pickle 的增强替代品。用户可以直接用import dill as pickle来替换现有代码中的 pickle 引用,无需改动其他逻辑。

除了扩展类型覆盖范围,dill 还增加了几个 pickle 不具备的能力:

保存和恢复完整的 Python 解释器会话状态。用户可以在一个会话中执行大量操作,用 dill 保存当前环境,之后在新环境中恢复并继续工作。这对需要长时间运行的计算任务比较有用。

提取函数和类的源代码。通过dill.source模块,可以获取对象对应的源码文本,而不只是序列化后的字节流。

诊断序列化错误。dill 提供了dill.detect.trace()上下文管理器,可以输出对象被序列化时的内部步骤树,帮助定位某个类型为什么无法被正确序列化。

使用方式

安装命令:

pip install dill

可选安装诊断工具:

pip install dill[graph] pip install dill[profile]

基础用法与 pickle 完全一致:

fromdillimportdumps,loads squared=lambdax:x**2loads(dumps(squared))(3)# 返回 9

dill 提供了几个关键参数来控制序列化行为:

byref=True 时,模块等对象按引用序列化,而非直接嵌入对象内容,序列化结果更小。

recurse=True 时,递归追踪全局字典中的引用对象,而非直接存储整个全局字典。

fmode 参数控制文件对象的序列化策略:HANDLE_FMODE 只保存句柄,CONTENTS_FMODE 保存文件内容,FILE_FMODE 同时保存两者。跨机器传输时通常需要选择 CONTENT_FMODE 或 FILE_FMODE。

这些参数也可以在dill.settings中全局设置,避免每次调用都重复指定。

适用场景

dill 的主要用途是将 Python 对象转为字节流后在网络中传输。相比 pickle,它的优势在于能序列化 lambda、嵌套函数等 pickle 无法处理的对象类型。在分布式计算框架中,这类需求很常见。

另一个典型场景是保存和恢复解释器会话。数据科学家在交互式环境中运行了一系列探索性分析后,可以用 dill 保存当前命名空间中的所有变量和函数定义,后续直接恢复而无需重新执行。

需要注意的是,dill 和 pickle 一样不保证对恶意构造的数据安全。反序列化来自不可信来源的数据存在风险,使用者需要自行判断数据来源。

dill 要求 Python 3.10 或更高版本。作为 pathos 计算框架的组成部分,它仍在持续维护中。

使用者需要自行判断数据来源。

dill 要求 Python 3.10 或更高版本。作为 pathos 计算框架的组成部分,它仍在持续维护中。

http://www.jsqmd.com/news/971533/

相关文章:

  • 2026年AI中转站大全|API聚合平台横评推荐:从企业级高可用到开源,含稳定性对比+成本省钱技巧+避坑防骗指南(实测Token173/CatRouter/非线智能/OpenRouter/七牛云AI等
  • Linux网络管理
  • NSK极速滚珠丝杠USFC 2040-6技术手册
  • 2026年 HC340/590DPD+Z 高强度双相镀锌板厂家推荐榜:汽车轻量化与耐腐蚀核心方案深度解析 - 品牌发掘
  • 安卓设备调试核心技术剖析:ADB命令深度实践指南
  • 从登录页到搜索框:手把手拆解微信小程序input在不同业务场景下的最佳实践
  • 税务服务哪家好?税果优税务怎么样? - mypinpai
  • 嵌入式软件工程师_面试题练习_01
  • 2026年上海冷轧/热镀锌/高强钢/酸洗板/汽车钢/优特钢厂家推荐排行榜:高等级钢材牌号全解析与实力厂商权威对比指南 - 品牌发掘
  • 2026年北京工伤律师推荐 聚赋工伤维权团队专业护航 - 本地品牌推荐
  • 垂直行业企业怎么做精准GEO优化
  • 2026年油管制造商口碑排行,谁才是真正可靠之选?
  • 站酷(ZCOOL)设计作品批量采集系统:高清原图提取、多格式下载与自动分类
  • 音频信息传输系统第四周
  • 关于拥塞控制的几点思考
  • 江苏汇生红木推荐,其家具性价比高吗 - myqiye
  • 手把手教你用ZLToolKit的WorkThreadPool优化你的音视频流媒体服务性能
  • JAVASE类和对象-6
  • 为什么C盘总是最先满?NTFS/FAT32/exFAT的前世今生
  • 2026诸暨下水道疏通,地漏马桶疏通专业的师傅选择谁比较好?建议选公安备案+特种作业操作证! - 极速版本
  • 2026年 水洗石/水磨石/环氧磨石/聚脲磨石厂家推荐:干石子、干磨石与金刚磨石品牌实力深度解析 - 品牌发掘
  • macOS 开发者必备:FlyEnv
  • 智读致用《埃隆之书》9|我们必须实干制造:原型不值钱,量产才值钱
  • ros 1 跑rtab map
  • 我需要气动光边装置配件,艾捷龙品牌靠谱吗? - 工业品牌热点
  • Anthropic安全白皮书1|零信任 for AI Agents:AI时代的智能体安全,不能再靠“防火墙”了
  • 2026年郑州公司法律师怎么选?看这三点关键不踩雷 - 本地品牌推荐
  • 实验二:路径查找算法应用:交易风险链路追踪
  • 2026年纸质礼盒定制推荐哪家,吾壹包装值得信赖吗? - myqiye
  • 做了 3 款 AI 产品才明白:工程化才是小团队的第一道生死线