当前位置: 首页 > 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.rkmt.cn/news/1483260.html

相关文章:

  • 2026年AI中转站大全|API聚合平台横评推荐:从企业级高可用到开源,含稳定性对比+成本省钱技巧+避坑防骗指南(实测Token173/CatRouter/非线智能/OpenRouter/七牛云AI等
  • 税务服务哪家好?税果优税务怎么样? - mypinpai
  • macOS 开发者必备:FlyEnv
  • JAVASE类和对象-6
  • ros 1 跑rtab map
  • Anthropic安全白皮书1|零信任 for AI Agents:AI时代的智能体安全,不能再靠“防火墙”了
  • 不懂编程,但是用AI做了一个推箱子经典游戏:我的Vibe Coding初体验
  • 普通家庭旧藏老字画,快速判断有没有价值 - 深鉴新闻
  • 3个每天都能用到的免费AI工具,帮你省下2小时
  • 2026年上海酸洗钢卷/镀锌钢卷/冷轧钢卷厂家推荐榜单:宝钢、酒钢等品牌镀铝镁锌板卷优质供应商深度解析 - 品牌发掘
  • MTFlow:基于流匹配的微管图像分割创新方法
  • 2026年合肥黄金回收推荐榜:黄金首饰/手表名表/名包劳力士回收,专业估价与诚信服务口碑之选 - 品牌发掘
  • Warcraft Helper:让经典魔兽争霸III在现代系统上重获新生
  • 2026年建筑胶粘剂十大品牌推荐:瓷砖胶/背涂胶/防水胶/美缝胶/结构胶源头厂家硬核测评与避坑指南 - 品牌发掘
  • 龙魂系统3.0:重塑数字自治新纪元
  • 基于CNN的安全带检测设计 安全带佩戴识别
  • 2026年天津中考体育乒乓球培训推荐 燃迈体育专业小班制精准提分 - 本地品牌推荐
  • HEVC(二):如何实现并行处理
  • 2026年中国热门的DODGE带座轴承品牌排名:金双紫好不好? - myqiye
  • 海南生产停电应急配套,防爆油箱租赁口碑如何? - mypinpai
  • [鸿蒙PC三方库移植适配] 使用 AtomCode + Skills 自动完成libhv鸿蒙化适配
  • CSDN AI数据看板企业级能力全曝光:5个个人版根本看不到的关键维度,今天起别再用错版本!
  • 2026年石家庄搬家公司推荐怎么选?看这四点关键不踩雷 - 本地品牌推荐
  • TVA为什么是企业智能化升级的战略支点(16)
  • 交通设施选亿路怎么样? - myqiye
  • 基于物理场的动态模式分解(piDMD)研究(Matlab代码实现)
  • 三相逆变器PQ控制模型仿真研究(simulink仿真实现)
  • 传统软件公司如何转型AI Agent服务商
  • jQuery Mobile 导航栏
  • 基于功率分配与电压恢复的分布式二次控制研究(Simulink仿真实现)