Python下Json和Msgpack序列化比较
最近用Python时,遇到了序列化对象的问题,传统的json和新型序列化工具包msgpack都有涉及,于是做一个简单的总结:
通俗的讲:序列化:将对象信息转化为可以存储或传输的形式;反序列化:把这个存储的内容还原成对象。
json就不用多做解释了,是一种轻量级的数据交换格式,广泛应用于web开发中。当然也是将对象序列化成符合json规范的格式。网上有一堆堆资料。
msgpack就有意思了,先看下官方解释:
我这里主要基于实际python中的使用,对比一下两种序列化效果。具体细节这位兄弟的博客讲解比较详细:http://www.heyues.com/messagepack/
好的,不管别人说的多么牛逼,还是要用自己代码试一试,才是看的到的嘛,简单写了一个测试脚本:
对一个字典对象,用json和msgpack分别序列化、反序列化10000次,观察速度和序列化之后的内存占用。
import json,msgpack,sys,time a = {'name':'yzy','age':26,'gender':'male','location':'Shenzhen'} begin_json = time.clock()
for i in range(10000):
in_json = json.dumps(a)
un_json = json.loads(in_json)
end_json = time.clock()
print('Json serialization time: %.05f seconds' %(end_json-begin_json))
print (type(in_json),'content: ',in_json,'size: ',sys.getsizeof(in_json))
print (type(un_json),'content: ',un_json,'size: ',sys.getsizeof(un_json)) begin_msg = time.clock()
for i in range(10000):
in_msg = msgpack.packb(a)
un_msg = msgpack.unpackb(in_msg)
"""
# alias for compatibility to simplejson/marshal/pickle.
load = unpack
loads = unpackb dump = pack
dumps = packb
"""
# in_msg1 = msgpack.dumps(a)
# un_msg1 = msgpack.loads(in_msg)
end_msg = time.clock()
print('Msgpack serialization time: %.05f seconds' %(end_msg-begin_msg)) print (type(in_msg),'content: ',in_msg,'size: ',sys.getsizeof(in_msg))
print (type(un_msg),'content: ','size: ',sys.getsizeof(un_msg)
结果:
不得不说,从大小上面和耗时上面,msgpack的确有明显优势。
就我自己的测试而言,速度至少快了3倍多。
Json serialization time: 0.16115 seconds
<class 'str'> content: {"age": 26, "location": "Shenzhen", "name": "yzy", "gender": "male"} size: 117
<class 'dict'> content: {'age': 26, 'location': 'Shenzhen', 'name': 'yzy', 'gender': 'male'} size: 288
Msgpack serialization time: 0.05043 seconds
<class 'bytes'> content: b'\x84\xa3age\x1a\xa8location\xa8Shenzhen\xa4name\xa3yzy\xa6gender\xa4male' size: 78
<class 'dict'> content: size: 288
这样看来,msgpack还是有很大潜力的。虽然现在现存的系统大都适用json,但随着发展,包括Redis等对msgpack的支持,msgpack肯定会用在越来越多的数据传输中。
Python下Json和Msgpack序列化比较的更多相关文章
- Python 下JSON的两种编解码方式实例解析
概念 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写.在日常的工作中,应用范围极其广泛.这里就介绍python下它的两种编解码方法: ...
- Python的json and pickle序列化
json序列化和json反序列化 #!/usr/bin/env python3 # -*- coding: utf-8 -*- __author__ = '人生入戏' import json a = ...
- Python下json中文乱码解决办法
json.dumps在默认情况下,对于非ascii字符生成的是相对应的字符编码,而非原始字符,只需要 #coding=utf8 import json js = json.loads('{" ...
- Python进行JSON格式化输出,以及汉字显示问题
格式化输出 转载地址 https://blog.csdn.net/real_tino/article/details/76422634 问题分析: Python下json手法的json在打印查看时, ...
- Python之路-python(装饰器、生成器、迭代器、Json & pickle 数据序列化、软件目录结构规范)
装饰器: 首先来认识一下python函数, 定义:本质是函数(功能是装饰其它函数),为其它函数添加附件功能 原则: 1.不能修改被装饰的函数的源代码. 2.不 ...
- Python-Day4 Python基础进阶之生成器/迭代器/装饰器/Json & pickle 数据序列化
一.生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面 ...
- python基础6之迭代器&生成器、json&pickle数据序列化
内容概要: 一.生成器 二.迭代器 三.json&pickle数据序列化 一.生成器generator 在学习生成器之前我们先了解下列表生成式,现在生产一个这样的列表[0,2,4,6,8,10 ...
- Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式
Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式 目录 Pycharm使用技巧(转载) Python第一天 安装 shell 文件 Py ...
- python开发模块基础:序列化模块json,pickle,shelve
一,为什么要序列化 # 将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化'''比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给?现在我们能想到的方法就是存在文 ...
随机推荐
- Office2016打开doc字符间距过小
缺少字体.........装上就行,放到windows/fonts目录下,自动安装了
- Automated Memory Analysis
catalogue . 静态分析.动态分析.内存镜像分析对比 . Memory Analysis Approach . volatility: An advanced memory forensics ...
- 微信开发包注意jar版本:
微信java jar的加密key的大小支持 异常java.security.InvalidKeyException:illegal Key Size的解决方案:在官方网站下载JCE无限制权限策略文件( ...
- sift特征
已经有很多博客已经将sift特征提取算法解释的很清楚了,我只是记录一些我不明白的地方,并且记录几个理解sift特征比较好的博客. 1. http://aishack.in/tutorials/sift ...
- maven log4g 用法
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> & ...
- ip地址库 新浪,淘宝
原文连接地址:http://www.9958.pw/post/city_ip function getAddressFromIp($ip){ $urlTaobao = 'http://ip.taoba ...
- git查看本地和创建分支、上传分支、提交代码到分支、删除分支等,git分支、git查看本地和创建分支以及上传分支到服务器
以下是git命令行里边的命令操作 ##进入项目目录下 giscafer@Faronsince2016 /G/002_project $ cd Comments ##查看远程分支有哪些 giscafer ...
- Zabbix自定义监控8080端口的连接数
Zabbix自定义监控8080端口的连接数 一 zabbix自定义监控实现思路 实际上我们要想使用zabbix来监控一些服务的原理很简单,步骤分别是:1.写一个脚本用于获取待监控服务的一些状态信息2. ...
- web app开发技巧总结 (share)
(转自http://hi.baidu.com/kuntakinte/item/ca92d6e5edae9fc0bbf37d08) 自Iphone和Android这两个牛逼的手机操作系统发布以来,在互联 ...
- sql表分区
1.单表达多少条数据后需要分区呢? a.个人认为要似情况而定,有些常操作的表,分区反而带来麻烦,可以采用物理分表以及其它方法处理: b.对于一些日志.历史订单类的查询数据,500w左右即可享受 ...