我正在使用json
Python 2.6中的模块来加载和解码JSON文件.但是我目前的表现比预期慢.我正在使用一个6MB大小的测试用例,json.loads()
需要20秒.
我以为该json
模块有一些本机代码来加速解码?
如何检查是否正在使用?
作为比较,我下载并安装了python-cjson
模块,并且cjson.decode()
在相同的测试用例中花了1秒钟.
我宁愿使用Python 2.6提供的JSON模块,因此我的代码用户不需要安装其他模块.
(我正在Mac OS X上开发,但我在Windows XP上得到了类似的结果.)
新的Yajl - 又一个JSON库非常快.
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更快.
它可能因平台而异,但内置的json模块基于simplejson,不包括C加速.我发现simplejson无论如何都要像python-cjson一样快,所以我更喜欢它,因为它显然具有与内置相同的接口.
try: import simplejson as json except ImportError: import json
在我看来,这是一段时间内最好的习惯用语,在向前兼容时可以获得性能.
我正在解析相同的文件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
不确定为什么数字与您的结果不成比例.我猜,新的图书馆?
看看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
蟒蛇-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