45

jsonPython 2.6のモジュールを使用して、 JSON ファイルを読み込んでデコードしています。ただし、現在、パフォーマンスが予想よりも遅くなっています。サイズが 6MB でjson.loads()20 秒かかるテスト ケースを使用しています。

jsonモジュールには、デコードを高速化するためのネイティブコードがいくつかあると思いましたか?

これが使用されているかどうかを確認するにはどうすればよいですか?

python-cjson比較として、モジュールをダウンロードしてインストールしcjson.decode()ましたが、同じテスト ケースに 1 秒かかりました。

私のコードのユーザーが追加のモジュールをインストールする必要がないように、Python 2.6 で提供される JSON モジュールを使用したいと思います。

(私は Mac OS X で開発していますが、Windows XP でも同様の結果が得られます。)

4

7 に答える 7

31

新しいYajl - Yet Another JSON Libraryは非常に高速です。

yajl        serialize: 0.180  deserialize: 0.182  total: 0.362
simplejson  serialize: 0.840  deserialize: 0.490  total: 1.331
stdlib json serialize: 2.812  deserialize: 8.725  total: 11.537

ライブラリを自分で比較できます。

更新: UltraJSONはさらに高速です。

于 2011-04-28T15:29:52.973 に答える
17

同じファイルを10倍解析していました。ファイル サイズは 1,856,944 バイトでした。

Python 2.6:

yajl        serialize: 0.294  deserialize: 0.334  total: 0.627
cjson       serialize: 0.494  deserialize: 0.276  total: 0.769
simplejson  serialize: 0.554  deserialize: 0.268  total: 0.823
stdlib json serialize: 3.917  deserialize: 17.508 total: 21.425

Python 2.7:

yajl        serialize: 0.289  deserialize: 0.312  total: 0.601
cjson       serialize: 0.232  deserialize: 0.254  total: 0.486
simplejson  serialize: 0.288  deserialize: 0.253  total: 0.540
stdlib json serialize: 0.273  deserialize: 0.256  total: 0.528

数値が結果と不均衡である理由がわかりません。おそらく、新しいライブラリですか?

于 2013-01-25T00:09:00.147 に答える
15

UltraJSON をご覧ください https://github.com/esnme/ultrajson

ここで私のテスト(https://gist.github.com/lightcatcher/1136415からのコード)

プラットフォーム: OS X 10.8.3 MBP 2.2 GHz Intel Core i7

JSON:

simplejson==3.1.0

python-cjson==1.0.5

jsonlib==1.6.1

ujson==1.30

yajl==0.3.5

JSON Benchmark
2.7.2 (default, Oct 11 2012, 20:14:37)
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)]
-----------------------------
ENCODING
simplejson: 0.293394s
cjson: 0.461517s
ujson: 0.222278s
jsonlib: 0.428641s
json: 0.759091s
yajl: 0.388836s

DECODING
simplejson: 0.556367s
cjson: 0.42649s
ujson: 0.212396s
jsonlib: 0.265861s
json: 0.365553s
yajl: 0.361718s
于 2013-03-15T19:41:37.283 に答える
2

私の Windows 上の Python 2.6.1 のインストールを見ると、jsonパッケージ_jsonはランタイムに組み込まれているモジュールをロードします。モジュールCのソースはこちらです。json speedups

>>> import _json
>>> _json
<module '_json' (built-in)>
>>> print _json.__doc__
json speedups
>>> dir(_json)
['__doc__', '__name__', '__package__', 'encode_basestring_ascii', 'scanstring']
>>> 
于 2009-04-01T16:04:36.397 に答える
1

は利用可能です_jsonが、CPython 2.6.6 では json のデコードが非常に遅いことに気付きました。他の実装と比較したことはありませんが、パフォーマンスが重要なループ内では文字列操作に切り替えました。

于 2011-04-04T16:20:30.963 に答える