MessagePackとcPickleはデータのシリアライズに使われるライブラリです。
MessagePackとcPickleの速度比較は↑の記事にありますが、cPickleは↓の記事のようにプロトコルバージョンによる速度の違いがあるので、最速のプロトコル2と比較してみました。
Pythonのpickle.dumpに3番目の引数がある話 - 西尾泰和のはてなダイアリー
やったこと
numpyで5000x5000の行列を作って、それをそれぞれのライブラリでdumpとloadを10回ずつやって平均を出す。
結果
(秒) | MesssagePack | cPickle |
---|---|---|
Dump | 6.60 | 3.71 |
Load | 0.81 | 3.60 |
条件にもよると思いますが、どっちかが圧倒的に速いとは言えなさそうな結果になりました。
ソースコード
import timeit pickle_setup = """ import numpy as np import cPickle array = np.empty([5000, 5000]) """ pickle_dump = """ with open('pickle.time', 'w') as time: cPickle.dump(array, time, 2) """ pickle_load = """ with open('pickle.time', 'w') as time: cPickle.dump(array, time, 2) """ msgpack_setup = """ import numpy as np import msgpack array = np.empty([5000, 5000]) """ msgpack_dump = """ with open('msgpack.time', 'w') as time: msgpack.dump(array, time) """ msgpack_load = """ with open('msgpack.time', 'r') as time: msgpack.load(time) """ print 'cPickle Dump:', timeit.timeit(pickle_dump, pickle_setup, number=10) / 10 print 'cPickle Load:', timeit.timeit(pickle_load, pickle_setup, number=10) / 10 print 'msgpack Dump:', timeit.timeit(msgpack_dump, msgpack_setup, number=10) / 10 print 'msgpack Load:', timeit.timeit(msgpack_load, msgpack_setup, number=10) / 10