2013/01/09

Python の JSON モジュールの速度を比較してみる

とりあえず結果から

Python 2.6 の json モジュールはかなり遅いみたいです。
速度を気にする場面では避けたほうが無難です。
Python 2.7 以降では改善されているよう。(3.x は未確認)

以下、結果の詳細

ちょっと速度が気になる場面が出てきたので、自分で少し JSON のシリアライズのベンチマークを取ってみた。
Python 2.6 から、標準で json モジュールが組み込まれていますが、これ以外にも様々なモジュールがあります。
確か、組み込みの json は simplejson が元になっているような気がしました。

ベンチマークのとり方は、今回利用するアプリケーションに特化したベンチマークを取ろうとしたので、その形式になっています。
単純な50万個のリストが並んだリストです。シリアライズのみ。

ベンチマークに使ったコードは以下においておきます。
https://gist.github.com/4486729

比較するモジュールとバージョン

PyPI で探して手当たり次第入れてみた

    ベンチマーク1

    さくら VPS - Debian Squeeze
    Python 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
    というわけで、Python 2.6 の json モジュールが遅そうです。
    ちなみに、新規に 2.6 をソースからビルドしてみましたが同じ結果(遅い)でした。

    最終的にどれがよさそうなのか

    速そうなのは ujson ですね。本当に速さを重視するなら。
    "Ultra fast JSON encoder and decoder for Python" と言っているぐらいだし。

    でも simplejson の最新版を使っていれば特に問題ない気も...
    まあ 2.7 が普通な時代になれば良い話で... wheezy はやくこい。

    0 件のコメント: