AMF--pyamf 协议性能测试

来源:互联网 发布:055 台湾知乎 编辑:程序博客网 时间:2024/05/16 05:03

下面的测试代码是运行在苹果机上,I5处理器,2.3GHz

处理的原始数据约为1k。测试一秒钟可以跑多少次AMF3的编码。

#! /usr/bin/env python#coding=utf-8import timeimport pyamftest_data = {    'baihe': {        'name': unicode('百合', 'utf-8'),              'say': unicode('清新,淡雅,花香', 'utf-8'),             'grow_time': 0.5,                'fruit_time':  0.5,             'super_time': 0.5,              'total_time': 1,            'buy':{'gold':2, } ,              'harvest_fruit': 1,            'harvest_super': 1,            'sale': 1,                 'level_need': 0,           'experience' : 2,           'exp_fruit': 1,              'exp_super': 1,             'used': True,    },    '1':{        'interval' : 0.3,         'probability' : {            '98': {'chips' : (5, 25), },            '2' : {'gem' : (1,1), },        },    },    '2':{        'unlock' : {'chips':1000, 'FC':10,},        'interval' : 12,         'probability' : {            '70': {'chips' : (120, 250), },            '20': {'gem' : (1,1), },            '10': {'gem' : (2,2), },        },    },    'one':{        '10,5' :{'id':'m01', 'Y':1, 'msg':u'在罐子里发现了一个银币!',},        '3,7'  :{'id':'m02', 'Y':10,'msg':u'发现了十个银币!好大一笔钱!',},        '15,5' :{'id':'m03', 'Y':2, 'msg':u'一只老鼠跑了过去',},        '7,4'  :{'id':'m04', 'Y':4, 'msg':u'发现了四个生锈的银币……',},        '2,12' :{'id':'m05', 'Y':6, 'msg':u'六个闪亮的银币!',},    },        }start_time = time.time()print "start_time:", start_timej = 1while True:    j += 1    encoder = pyamf.get_encoder(pyamf.AMF3)      stream = encoder.stream       encoder.writeElement(test_data)      amf_data = stream.getvalue()     data_length = len(amf_data)    end_time = time.time()    if end_time - start_time >= 1 :        breakprint "loop_num:", jprint "end_time:  ",end_timeprint data_length


测试结果如下:

start_time: 1343897700.92
loop_num: 6805
end_time:   1343897701.92
656

可以看出,pyamf编码的效率并不高,单纯从序列化角度讲,cPickle的dumps()在协议1时,效率是pyamf的5倍多。

但是pyamf的压缩比要比pickle.dumps()高出20%以上。