Python对象序列化性能比较:pickle、json、msgpack

前言

最近在做毕设,需要读取处理大量的数据,txt中文文本,大概有83万个,多线程读取一次感觉非常慢,想到将读取后的列表序列化一下,保存在本地方便以后使用。之前一直用的pickle,由于处理的都是简单、小型的对象,对性能无感知,但这次处理的对象比较大,查了一下三种用的比较多方法:pickle、json、msgpack,正好对比一下。

三种工具介绍

Pickle

这是python标准库提供的序列化方法,可以序列化和反序列化任何python对象。它的优势在于速度快和支持任何python对象,缺点在于仅支持python解码器能解码的二进制数据,因此如果在不同的python版本或者平台之间互操作,可能会出现兼容性问题

Json

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。它可以表达基本的数据类型,支持比较复杂的结构及数据集合。它只支持 python 基本数据类型、列表、元组、字典等,只要保证对象有 dict 和 json() 方法就可以序列化为 JSON 格式,易于跨语言传输数据

Msgpack

Msgpack是一个非常高效的二进制序列化格式。它支持基本类型、数组、映射、用户自定义类型等,所以非常适合python对象的序列化。它的具体实现支持定长和不定长的标识符,可以达到高压缩率。常见的rpc和mq框架都使用msgpack作为默认序列化方法。

性能参考(由ChatGPT给出)

速度:msgpack > pickle > json
通用性:pickle > msgpack > json
跨语言:json > msgpack > pickle
压缩效率:msgpack > pickle > json

实际测试

测试条件

序列化对象:python列表
序列化大小:len(list) = 836075
环境:MacBookPro 2017,8+256,python3.9

测试结果

工具序列化用时/(秒)反序列化用时(秒)序列化后文件大小(GB)
Json147.63246.744.32
Pickle32.9429.432.20
Msgpack31.8419.192.19

结果供大家参考,欢迎交流。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值