Tốc độ thực sự phụ thuộc vào dữ liệu, đó là nội dung và kích thước.
Nhưng, dù sao, chúng ta hãy lấy một ví dụ dữ liệu json và xem những gì là nhanh hơn (Ubuntu 12.04, python 2.7.3):
Giving cấu trúc json này đổ vào test.json
và test.pickle
file:
{
"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"
}
}
}
}
}
kiểm tra kịch bản:
import timeit
import pickle
import cPickle
import json
import simplejson
import ujson
import yajl
def 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()
Output:
pickle:
107.936687946
cpickle:
28.4231381416
json:
31.6450419426
simplejson:
20.5853149891
ujson:
16.9352178574
yajl:
18.9763481617
Như bạn thấy, unpickling qua pickle
không phải là nhanh chóng ở tất cả - cPickle
là definetely con đường để đi nếu bạn chọn pickling/unpickling tùy chọn. ujson
trông đầy hứa hẹn trong số các trình phân tích cú pháp json này trên dữ liệu cụ thể này.
Ngoài ra, các thư viện json
và simplejson
tải nhanh hơn trên pypy (xem Python JSON Performance).
Xem thêm:
Điều quan trọng cần lưu ý là các kết quả có thể khác nhau trên hệ thống cụ thể của bạn, về chủng loại và kích thước của dữ liệu khác.
Tại sao yêu cầu người lạ ngẫu nhiên trên Internet? Tự đánh giá! – NPE
Nó sẽ thực sự phụ thuộc vào loại nội dung, độ dài, và kích thước tổng thể ... Ngoài ra khi bạn đang ở đó, bạn cũng có thể muốn thử cPickle và cjson (sau này là cho 2.xx, cjson không có sẵn cho 3 .xx) trong thời gian dùng thử. –
Ngoài những gì @ Nisan.H cho biết, cũng có thư viện JSON của bên thứ ba (tức là trên PyPI) yêu cầu nhanh hơn đáng kể. – delnan