除了cPickle,cjson外还有没有更高效点的序列化库了
发布时间:2020-12-16 19:27:58 所属栏目:百科 来源:网络整理
导读:msgpack最快,而且是跨语言的,二进制,但只能打包简单的list,dict,int,string,unicode,在memcache之类的 字符串协议里会有问题。 marshal其次,也是二进制的,可以打包大多数python对象,缺点同msgpack,另文档上说各版本的python实现会不一样,但我这测下
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) def marshal_test(c,245)"> s = marshal.dumps(data) marshal.loads(s) def tnetstring_test(c,245)"> s = tnetstring.dumps(data) tnetstring.loads(s) def bson_test(c,245)"> s = bson.dumps(data) bson.loads(s) def msgpackb_test(c,245)"># packer = msgpack.Packer() s = msgpack.packb(data) msgpack.unpackb(s) def msgpack_test(c,245)"> packer = msgpack.Packer() 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,245)"># tnetstring_test(count,245)"># bson_test(count,245)"># msgpack_test(count,245)"> msgpackb_test(count,data) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |