投稿日
2010/10/24 日曜日
最近よく複雑なオブジェクトの保存のためにJSONを使っています。
人間にも読みやすいのでテストやデバッグに便利です。
しかしWebサービス等で使うとなると使い方にもよりますが、物凄い回数オブジェクト→JSONとかJSON→オブジェクトとかの変換が行われる事になります。
JSONよりも読みづらくなりますが、専用のバイナリデータを扱うpickleならもっと速いんじゃないか?ということで調べてみました。
以下、テストコード。
import timeit import json import pickle import cPickle source_data = dict(id = 256, title = u'Test title.', tags = ('test', 'other', 'html'), published = True, comments = []) repeat = 3 loop = 100000 def to_json(data): return json.dumps(data) def from_json(data): return json.loads(data) def to_pickle(data): return pickle.dumps(data, protocol = 2) def from_pickle(data): return pickle.loads(data) def to_cPickle(data): return cPickle.dumps(data, protocol = 2) def from_cPickle(data): return cPickle.loads(data) print 'to_json' t = timeit.Timer('to_json(source_data)', 'from __main__ import to_json, source_data') print min(t.repeat(repeat, loop)) print '' print 'to_pickle' t = timeit.Timer('to_pickle(source_data)', 'from __main__ import to_pickle, source_data') print min(t.repeat(repeat, loop)) print '' print 'to_cPickle' t = timeit.Timer('to_cPickle(source_data)', 'from __main__ import to_cPickle, source_data') print min(t.repeat(repeat, loop)) print '' print 'from_json' json_data = to_json(source_data) t = timeit.Timer('from_json(json_data)', 'from __main__ import from_json, json_data') print min(t.repeat(repeat, loop)) print '' print 'from_pickle' pickle_data = to_pickle(source_data) t = timeit.Timer('from_pickle(pickle_data)', 'from __main__ import from_pickle, pickle_data') print min(t.repeat(repeat, loop)) print '' print 'from_cPickle' cPickle_data = to_cPickle(source_data) t = timeit.Timer('from_cPickle(cPickle_data)', 'from __main__ import from_cPickle, cPickle_data') print min(t.repeat(repeat, loop)) print ''
実行結果(Python2.7使用)
to_json 1.91382908821 to_pickle 16.7020881176 to_cPickle 0.530957937241 from_json 2.18486499786 from_pickle 9.6311609745 from_cPickle 0.661497116089
pickle遅いです。
というかjson速いです。
cPickleと比べてこの速度差なら、自分の典型的な作成パターンだとデバッグのしやすさを考えてとりあえずjsonですね。
速度に我慢ならなくなったらcPickle。
しかしそれぞれメリット・デメリットありますので使い道次第です。
最近のコメント
名前
しゅごい
Jane Doe
FYI Avoid Annoying Unexpe…
Jane Doe
ご存じとは思いますが、whileには、”~の間”と…
peta_okechan
針金みたいなパーツを引っ張ると外れます。 他の方の…
虎徹ファン交換
虎徹の標準ファンを外す際に、どのようにして外されま…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…