##// END OF EJS Templates
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported
Rewrite controller, remove MPDecorator to units (keep for plots an writers) use of queues for interproc comm instead of zmq, self operations are no longer supported

File last commit:

r697:7ac8878019bb
r1287:af11e4aac00c
Show More
test _serializer_speed.py
174 lines | 5.9 KiB | text/x-python | PythonLexer
/ schainpy / model / serializer / test / test _serializer_speed.py
Miguel Valdez
Merge with branch schain_julia_drifts from rev. 803 to 995....
r568 '''
Created on Jul 16, 2014
@author: roj-idl71
'''
"""
Dependencies:
pip install tabulate simplejson python-cjson ujson yajl msgpack-python
"""
from timeit import timeit
from tabulate import tabulate
setup = '''d = {
'words': """
Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Mauris adipiscing adipiscing placerat.
Vestibulum augue augue,
pellentesque quis sollicitudin id, adipiscing.
""",
'boolean' : False,
'list': range(10),
'dict': dict((str(i),'a') for i in xrange(10)),
'int': 100,
'float': 100.123456,
}'''
setup = '''import numpy;
import datetime;
d = {
'words': """
Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Mauris adipiscing adipiscing placerat.
Vestibulum augue augue,
pellentesque quis sollicitudin id, adipiscing.
""",
'boolean' : False,
'list': range(10),
'dict': dict((str(i),'a') for i in xrange(10)),
'int': 100,
'float': 100.123456,
'datetime' : datetime.datetime(2001,1,1,10,10,10)
}'''
setup_pickle = '%s ; import pickle ; src = pickle.dumps(d)' % setup
setup_pickle2 = '%s ; import pickle ; src = pickle.dumps(d, 2)' % setup
setup_cpickle = '%s ; import cPickle ; src = cPickle.dumps(d)' % setup
setup_cpickle2 = '%s ; import cPickle ; src = cPickle.dumps(d, 2)' % setup
setup_json = '%s ; import json; src = json.dumps(d)' % setup
setup_ujson = '%s ; import ujson; src = ujson.encode(d)' % setup
setup_cjson = '%s ; import cjson; src = cjson.encode(d)' % setup
setup_simplejson = '%s ; import simplejson; src = simplejson.dump(d)' % setup
setup_jsonpickle = '%s ; import jsonpickle; src = jsonpickle.encode(d)' % setup
setup_yaml = '%s ; import yaml; src = yaml.dump(d)' % setup
setup_msgpack = '%s ; import msgpack; src = msgpack.dumps(d)' % setup
setup_msgpack_np = '%s; import msgpack_numpy as msgpack; src = msgpack.dumps(d)' % setup
tests = [
# (title, setup, enc_test, dec_test, result)
('cPickle (binary)', 'import cPickle; %s' % setup_cpickle2, 'cPickle.dumps(d, 2)', 'r = cPickle.loads(src)', 'print r'),
('cPickle (ascii)', 'import cPickle; %s' % setup_cpickle, 'cPickle.dumps(d, 0)', 'r = cPickle.loads(src)', 'print r'),
('pickle (binary)', 'import pickle; %s' % setup_pickle2, 'pickle.dumps(d, 2)', 'r = pickle.loads(src)', 'print r'),
('pickle (ascii)', 'import pickle; %s' % setup_pickle, 'pickle.dumps(d, 0)', 'r = pickle.loads(src)', 'print r'),
('jsonpickle', 'import jsonpickle; %s' % setup_jsonpickle, 'jsonpickle.encode(d)', 'r = jsonpickle.decode(src)', 'print r'),
# ('msgpack-numpy-python', '%s' % setup_msgpack_np, 'msgpack.dumps(d)', 'r = msgpack.loads(src)', 'print r'),
('ujson', 'import ujson; %s' % setup_ujson, 'ujson.encode(d)', 'r = ujson.decode(src)', 'print r'),
# ('msgpack-python', 'import msgpack; %s' % setup_msgpack, 'msgpack.dumps(d)', 'r = msgpack.loads(src)', 'print r'),
# ('json', 'import json; %s' % setup_json, 'json.dumps(d)', 'r = json.loads(src)', 'print r'),
# ('python-cjson-1.0.5', 'import cjson; %s' % setup_cjson, 'cjson.encode(d)', 'r = cjson.decode(src)', 'print r'),
# ('simplejson-3.3.1', 'import simplejson; %s' % setup_json, 'simplejson.dumps(d)', 'r = simplejson.loads(src)', 'print r'),
('yaml', 'import yaml; %s' % setup_yaml, 'yaml.dump(d)', 'r = yaml.load(src)', 'print r'),
]
loops = 1
enc_table = []
dec_table = []
print "Running tests (%d loops each)" % loops
for title, mod, enc, dec, msg in tests:
print title
### Getting the package size
exec mod
size = len("".join(src))
print " [Encode]", enc
result = timeit(enc, mod, number=loops)
enc_table.append([title, result, size])
print " [Decode]", dec
result = timeit(dec, mod, number=loops)
dec_table.append([title, result])
print " Result"
result = timeit(msg, mod+';'+dec, number=1)
enc_table.sort(key=lambda x: x[1])
enc_table.insert(0, ['Package', 'Seconds', 'Size'])
dec_table.sort(key=lambda x: x[1])
dec_table.insert(0, ['Package', 'Seconds'])
print "\nEncoding Test (%d loops)" % loops
print tabulate(enc_table, headers="firstrow")
print "\nDecoding Test (%d loops)" % loops
print tabulate(dec_table, headers="firstrow")
"""
OUTPUT:
Running tests (15000 loops each)
pickle (ascii)
[Encode] pickle.dumps(d, 0)
[Decode] pickle.loads(src)
pickle (binary)
[Encode] pickle.dumps(d, 2)
[Decode] pickle.loads(src)
cPickle (ascii)
[Encode] cPickle.dumps(d, 0)
[Decode] cPickle.loads(src)
cPickle (binary)
[Encode] cPickle.dumps(d, 2)
[Decode] cPickle.loads(src)
json
[Encode] json.dumps(d)
[Decode] json.loads(src)
simplejson-3.3.1
[Encode] simplejson.dumps(d)
[Decode] simplejson.loads(src)
python-cjson-1.0.5
[Encode] cjson.encode(d)
[Decode] cjson.decode(src)
ujson-1.33
[Encode] ujson.dumps(d)
[Decode] ujson.loads(src)
yajl 0.3.5
[Encode] yajl.dumps(d)
[Decode] yajl.loads(src)
msgpack-python-0.3.0
[Encode] msgpack.dumps(d)
[Decode] msgpack.loads(src)
Encoding Test (15000 loops)
Package Seconds
-------------------- ---------
ujson-1.33 0.232215
msgpack-python-0.3.0 0.241945
cPickle (binary) 0.305273
yajl 0.3.5 0.634148
python-cjson-1.0.5 0.680604
json 0.780438
simplejson-3.3.1 1.04763
cPickle (ascii) 1.62062
pickle (ascii) 14.0497
pickle (binary) 15.4712
Decoding Test (15000 loops)
Package Seconds
-------------------- ---------
msgpack-python-0.3.0 0.240885
cPickle (binary) 0.393152
ujson-1.33 0.396875
python-cjson-1.0.5 0.694321
yajl 0.3.5 0.748369
simplejson-3.3.1 0.780531
cPickle (ascii) 1.38561
json 1.65921
pickle (binary) 5.20554
pickle (ascii) 17.8767
"""