除了cPickle,cjson外还有没有更高效点的序列化库了
来源:互联网 发布:科幻悬疑 知乎 编辑:程序博客网 时间:2024/04/29 00:41
msgpack最快,而且是跨语言的,二进制,但只能打包简单的list,dict,int,string,unicode,在memcache之类的
字符串协议里会有问题。
marshal其次,也是二进制的,可以打包大多数python对象,缺点同msgpack,另文档上说各版本的python实现会不一样,但我这测下
来三台机器分别是stackless 2.6.5 2.7.2 python 2.6.2之间都没出现兼容问题
tnetstring速度第三,字符打包,可以完美支持各种协议的后端,但有一个致命的缺点就是支持类型太少,比如下面的代码mongo里出来的
unicode就无法打包。
以上三者速度差距很小很小。
bson,cPickle,json都很慢。。直接pass
cPickle_test used time 1.32382702827s
marshal_test used time 0.29944396019s
msgpackb_test used time 0.23744893074s
#!/usr/bin/env Python
#coding=utf-8
'''
Created on Jul 13, 2011
@author: apple
'''
import time,functools
import cPickle,marshal,tnetstring,bson,msgpack
import pymongo
data = pymongo.Connection().freeasker.question.find_one()
data.pop('_id')
def timeit(func):
@functools.wraps(func)
def __do__(*args,**wk):
start = time.time()
result= func(*args,**wk)
print '%s used time %ss'%(func.__name__,time.time()-start)
return result
return __do__
@timeit
def cPickle_test(c,data):
for i in xrange(c):
s = cPickle.dumps(data)
cPickle.loads(s)
@timeit
def marshal_test(c,data):
for i in xrange(c):
s = marshal.dumps(data)
marshal.loads(s)
@timeit
def tnetstring_test(c,data):
for i in xrange(c):
s = tnetstring.dumps(data)
tnetstring.loads(s)
@timeit
def bson_test(c,data):
for i in xrange(c):
s = bson.dumps(data)
bson.loads(s)
@timeit
def msgpackb_test(c,data):
# packer = msgpack.Packer()
for i in xrange(c):
s = msgpack.packb(data)
msgpack.unpackb(s)
@timeit
def msgpack_test(c,data):
packer = msgpack.Packer()
for i in xrange(c):
s = packer.pack(data)
packer.unpack(s)
if __name__ == '__main__':
count = 10000
data = pymongo.Connection().freeasker.question.find_one()
data.pop('_id')
cPickle_test(count, data)
marshal_test(count, data)
# tnetstring_test(count, data)
# bson_test(count, data)
# msgpack_test(count, data)
msgpackb_test(count, data)
字符串协议里会有问题。
marshal其次,也是二进制的,可以打包大多数python对象,缺点同msgpack,另文档上说各版本的python实现会不一样,但我这测下
来三台机器分别是stackless 2.6.5 2.7.2 python 2.6.2之间都没出现兼容问题
tnetstring速度第三,字符打包,可以完美支持各种协议的后端,但有一个致命的缺点就是支持类型太少,比如下面的代码mongo里出来的
unicode就无法打包。
以上三者速度差距很小很小。
bson,cPickle,json都很慢。。直接pass
cPickle_test used time 1.32382702827s
marshal_test used time 0.29944396019s
msgpackb_test used time 0.23744893074s
#!/usr/bin/env Python
#coding=utf-8
'''
Created on Jul 13, 2011
@author: apple
'''
import time,functools
import cPickle,marshal,tnetstring,bson,msgpack
import pymongo
data = pymongo.Connection().freeasker.question.find_one()
data.pop('_id')
def timeit(func):
@functools.wraps(func)
def __do__(*args,**wk):
start = time.time()
result= func(*args,**wk)
print '%s used time %ss'%(func.__name__,time.time()-start)
return result
return __do__
@timeit
def cPickle_test(c,data):
for i in xrange(c):
s = cPickle.dumps(data)
cPickle.loads(s)
@timeit
def marshal_test(c,data):
for i in xrange(c):
s = marshal.dumps(data)
marshal.loads(s)
@timeit
def tnetstring_test(c,data):
for i in xrange(c):
s = tnetstring.dumps(data)
tnetstring.loads(s)
@timeit
def bson_test(c,data):
for i in xrange(c):
s = bson.dumps(data)
bson.loads(s)
@timeit
def msgpackb_test(c,data):
# packer = msgpack.Packer()
for i in xrange(c):
s = msgpack.packb(data)
msgpack.unpackb(s)
@timeit
def msgpack_test(c,data):
packer = msgpack.Packer()
for i in xrange(c):
s = packer.pack(data)
packer.unpack(s)
if __name__ == '__main__':
count = 10000
data = pymongo.Connection().freeasker.question.find_one()
data.pop('_id')
cPickle_test(count, data)
marshal_test(count, data)
# tnetstring_test(count, data)
# bson_test(count, data)
# msgpack_test(count, data)
msgpackb_test(count, data)
- 除了cPickle,cjson外还有没有更高效点的序列化库了
- 还有没有更简洁的代码实现单链表反转了?
- 爱老婆,除了性,还有更价值的东东
- 除了“钱景”,容器和Kubernetes还有更厚重的未来!
- 除了SLEEP还有没有更高精度的函数啊?
- 没有更堕落的了
- python序列化模块marshal和cPickle的效率比较
- pickle和cPickle:Python对象的序列化
- 小米 MIX 2 图赏:除了更小的“下巴”,“全面屏 2.0” 还有哪些亮点?
- 不知道有没有除了技术还有对产品感兴趣的?
- 除了人工智能工程师,还有一种工程师或许更抢手
- 除了人工智能工程师,还有一种工程师或许更抢手
- 一个人久了,除了寂寞点外还是蛮开心的
- 硬盘空间不够用了,怎么办,还有更绝的
- python_使用cPickle模块序列化
- 使用cPickle来序列化Python对象
- pickle, cPickle 模块:序列化 Python 对象
- 《C++精英内参之程序员高效指南》-11常用的读代码方法除了写注释的,还有其他方法
- SSH(Struts,Spring,Hibernate)的面试题
- 2012-02-02
- 依赖属性的理解
- Python命令行参数选择
- c语言itoa函数 和 atoi 函数大全
- 除了cPickle,cjson外还有没有更高效点的序列化库了
- 不纠结不是好设计师——标签栏的设计
- Mysql常用命令行大全
- textField的事件发出(带参数)
- marshal 对象的序列化
- 一年成为Emacs高手(像神一样使用编辑器)
- html5
- ComboBox如何禁止编辑
- 人生是马拉松,跑到最后的不一定是跑得最快的