速度实际上取决于数据,内容和大小。
但是,无论如何,让我们以json数据为例,看看什么更快(Ubuntu 12.04,python 2.7.3):
- pickle
- cPickle
- json
- simplejson
- ujson
- yajl
将此json结构转储到
test.json和
test.pickle文件中:
{ "glossary": { "title": "example glossary", "GlossDiv": { "title": "S", "GlossList": { "GlossEntry": { "ID": "SGML", "SortAs": "SGML", "GlossTerm": "Standard Generalized Markup Language", "Acronym": "SGML", "Abbrev": "ISO 8879:1986", "GlossDef": { "para": "A meta-markup language, used to create markup languages such as DocBook.", "GlossSeeAlso": ["GML", "XML"] }, "GlossSee": "markup" } } } }}测试脚本:
import timeitimport pickleimport cPickleimport jsonimport simplejsonimport ujsonimport yajldef load_pickle(f): return pickle.load(f)def load_cpickle(f): return cPickle.load(f)def load_json(f): return json.load(f)def load_simplejson(f): return simplejson.load(f)def load_ujson(f): return ujson.load(f)def load_yajl(f): return yajl.load(f)print "pickle:"print timeit.Timer('load_pickle(open("test.pickle"))', 'from __main__ import load_pickle').timeit()print "cpickle:"print timeit.Timer('load_cpickle(open("test.pickle"))', 'from __main__ import load_cpickle').timeit()print "json:"print timeit.Timer('load_json(open("test.json"))', 'from __main__ import load_json').timeit()print "simplejson:"print timeit.Timer('load_simplejson(open("test.json"))', 'from __main__ import load_simplejson').timeit()print "ujson:"print timeit.Timer('load_ujson(open("test.json"))', 'from __main__ import load_ujson').timeit()print "yajl:"print timeit.Timer('load_yajl(open("test.json"))', 'from __main__ import load_yajl').timeit()输出:
pickle:107.936687946cpickle:28.4231381416json:31.6450419426simplejson:20.5853149891ujson:16.9352178574yajl:18.9763481617
如您所见,通过酸洗/酸洗
pickle根本不是那么快-
cPickle如果您选择酸洗/酸洗选项,这绝对是要走的路。
ujson这些特定数据的json解析器中看起来很有希望。
此外,
json和
simplejson库上加载更快pypy(见Python的JSON性能)。
也可以看看:
- Pickle vs JSON —哪个更快?
重要的是要注意,结果可能在您的特定系统上,在其他类型和数据大小上有所不同。



