とりあえず結果から
Python 2.6 の json モジュールはかなり遅いみたいです。速度を気にする場面では避けたほうが無難です。
Python 2.7 以降では改善されているよう。(3.x は未確認)
以下、結果の詳細
ちょっと速度が気になる場面が出てきたので、自分で少し JSON のシリアライズのベンチマークを取ってみた。Python 2.6 から、標準で json モジュールが組み込まれていますが、これ以外にも様々なモジュールがあります。
確か、組み込みの json は simplejson が元になっているような気がしました。
ベンチマークのとり方は、今回利用するアプリケーションに特化したベンチマークを取ろうとしたので、その形式になっています。
単純な50万個のリストが並んだリストです。シリアライズのみ。
ベンチマークに使ったコードは以下においておきます。
https://gist.github.com/4486729
比較するモジュールとバージョン
PyPI で探して手当たり次第入れてみた- simplejson==3.0.5
- python-cjson==1.0.5
- czjson==1.0.8
- jsonlib==1.6.1
- jsonlib2==1.5.2
- demjson==1.6
- anyjson==0.3.3
- ujson==1.23
ベンチマーク1
さくら VPS - Debian SqueezePython 2.6.6
- json: 11.42
- simplejson: 1.67
- cjson: 1.43
- czjson: 1.42
- jsonlib: 1.68
- jsonlib2: 1.82
- demjson: 45.68
- anyjson: 1.91
- ujson: 0.54
ベンチマーク2
Core2 Duo E8400 - Debian wheezy (testing)Python 2.7.3rc2
- json: 0.79
- simplejson: 0.92
- cjson: 0.85
- czjson: 0.85
- jsonlib: 1.17
- jsonlib2: 0.96
- demjson: 31.77
- anyjson: 1.12
- ujson: 0.43
ん?違いありすぎ?!
なんかあまりにも、標準ライブラリの json の結果が違いますね。しょうがないので、さくら VPS に Python 2.7 を入れてみます。
しかし、pip 入れてないしモジュール入れるの面倒なので、標準ライブラリの json だけ...
さくら VPS Python 2.7.3
- json: 1.22
ちなみに、新規に 2.6 をソースからビルドしてみましたが同じ結果(遅い)でした。
最終的にどれがよさそうなのか
速そうなのは ujson ですね。本当に速さを重視するなら。"Ultra fast JSON encoder and decoder for Python" と言っているぐらいだし。
でも simplejson の最新版を使っていれば特に問題ない気も...
まあ 2.7 が普通な時代になれば良い話で... wheezy はやくこい。
0 件のコメント:
コメントを投稿