除了cPickle,cjson外还有没有更高效点的序列化库了

http://blog.csdn.net/chen_lovelotus/article/details/7228745

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)

除了cPickle,cjson外还有没有更高效点的序列化库了的更多相关文章

  1. MySQL比like语句更高效写法locate position instr find_in_set

    你是否一直在寻找比MySQL的LIKE语句更高效的方法的,下面我就为你介绍几种. LIKE语句 SELECT `column` FROM `table` where `condition` like  ...

  2. 更强、更稳、更高效:解读 etcd 技术升级的三驾马车

    点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 陈星宇(宇慕 ...

  3. [源码解析]为什么mapPartition比map更高效

    [源码解析]为什么mapPartition比map更高效 目录 [源码解析]为什么mapPartition比map更高效 0x00 摘要 0x01 map vs mapPartition 1.1 ma ...

  4. 阿里面试:MySQL如何设计索引更高效?

    有情怀,有干货,微信搜索[三太子敖丙]关注这个不一样的程序员. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系列文章. ...

  5. 想要更高效地找到信息,你需要掌握这些搜索技巧 (google or baidu)

    想要更高效地找到信息,你需要掌握这些搜索技巧 (google or baidu) 转载:https://tingtalk.me/search-tips/ 在大型局域网(互联网)的今天,你以为搜索是一门 ...

  6. 如何更高效地定制你的bootstrap

    bootstrap已经作为前端开发必不可少的框架之一,应用bootstrap使得我们对布局.样式的设定变得非常简单.但bootstrap提供的默认样式往往不能满足我们的需求,从而定制化bootstra ...

  7. documnent.getElementbyId(‘myId’)和$(‘#myId’)哪种更高效?

    第一种更高效,直接调用javascript引擎.

  8. 使jQuqer更高效的方法

    讨论 jQuery 和 javascript 性能的文章并不罕见.然而,本文我计划总结一些速度方面的技巧和我本人的一些建议,来提升你的 jQuery 和 javascript 代码.好的代码会带来速度 ...

  9. 为什么说Parcelable 比Serializable更高效

    本文转载自:http://blog.csdn.net/androidzhaoxiaogang/article/details/8172539 什么是序列化,实现序列化的目的是什么? 讨论这个问题之前, ...

随机推荐

  1. Selenium2+python自动化73-定位的坑:class属性有空格【转载】

    前言 有些class属性中间有空格,如果直接复制过来定位是会报错的InvalidSelectorException: Message: The given selector u-label f-dn ...

  2. 云平台资源挂盘办法V1.2

    一.优先使用mount 方式进行挂盘,记得使用sync参数,如果对方网络限制了445端口,我们被迫采用第二种办法. mount -t cifs -o sync,username='Administra ...

  3. 使用Derby ij客户端工具

    Derby是开源的.嵌入式的Java数据库程序,ij是Derby提供的客户端工具,相当于其他数据库提供的sqlplus工具. ij是纯Java的程序,不用安装,使用起来就像运行普通的Java应用程序一 ...

  4. VisualStudio 2013开发Office插件

    在VS中选择创建新项目,选择App for Office 选择mail出现的位置 Task pane The app appears in the task pane of a Microsift O ...

  5. selenium 定位

    一 . chrome的调试工具 1)在chrome界面,按F12快捷键,弹出chrome的调试工具 2)找出登录按钮的id和username.password的id  二.XPath工具 安装 为了提 ...

  6. xunsearch如何按照ID排序

    你ini再建一个字段id_tmp 类型type=numeric 重建索引的时候 数据源 加一个主键id的别名 id, id as id_tmp 排序的时候按照id_tmp排序

  7. (2)创建发布Maven

    一.创建maven项目 (1)命令行 mvn archetype:generate (2)选择模板默认是7 (3)输入组织号.项目名称及版本号.包名 回车确认 创建成功 二.转成idea项目 进入跟目 ...

  8. centos中pyenv安装

    1.先安装git yum install git -y 2.克隆pyenv到本地 git clone git://github.com/yyuu/pyenv.git .pyenv 或自动安装 curl ...

  9. 数据排序 第二讲( 各种排序方法 结合noi题库1.10)

    先来个题练练手吧! 例题 04:奖学金 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生 ...

  10. 循环节(BFS)

    循环节 时间限制: 1 Sec  内存限制: 64 MB提交: 56  解决: 16[提交][状态][讨论版] 题目描述 第一节是英语课.今天,老师又教了桐桐很多单词.桐桐发现所有单词都有循环节(大写 ...