【Python】jsonライブラリのベンチマークを測った
ソースコードの全体は以下です。
内容としては設定ファイル(settings.py)に比較したいPythonのjsonライブラリと、読み込むjsonファイルのパス、テストする回数等を記載し、実行するだけです。
# settings.py MODULES = ("json", "orjson", "rapidjson", "simplejson", "ujson") COMPLEX_FILE = "./test_data/COMPLEX.json" SIMPLE_FILE = "./test_data/SIMPLE.json" REPEAT = 10 NUMBER = 10000
ベンチマークの部分は以下。
def benchmark_dumps(m, data: str, r: int, n: int): return min(repeat(lambda: m.dumps(data), repeat=r, number=n)) def benchmark_loads(m, data: str, r: int, n: int): return min(repeat(lambda: m.loads(data), repeat=r, number=n))
timeit.repeat()でr回(今回は10)メソッドの実行を行うことをn回(今回は10000)繰り返し、最小値を結果としています。
結果はcsv形式で出力されるので、excelやスプレッドシートで開いて早かった順に並び替えたりグラフ化したりします。
検証結果
で実行した結果、以下のようになりました。
COMPLEX JSON
jsonデータはいずれも拾った適当なものです。
SIMPLE JSON
データの種類や処理に関係なく私の環境では以下の順に速かったです。
- orjson
- ujson
- rapidjson
- json
- simplejson
おわりに
もはや何番煎じみたいなネタですが、自分で検証できる手段は持っておきたかったのと、同じ処理を複数のライブラリで実行するコードを書きたかったという試みでした。(それに自分で検証するの大事)
今回は技術選定目的ではなかったのですが、実際にそれ目的で検証する機会があったときにデータ見直してこのコード使ってまたできたらなと。
参考
Benchmark of Python JSON libraries - Artem Krylysov