source

Python 2.6 JSON 디코딩 성능

gigabyte 2023. 4. 4. 21:23
반응형

Python 2.6 JSON 디코딩 성능

를 사용하고 있습니다.json모듈을 사용하여 JSON 파일을 로드 및 디코딩합니다.하지만 저는 지금 기대했던 것보다 더 느려지고 있어요.6MB 크기의 테스트 케이스를 사용하고 있습니다.json.loads()20초 걸립니다.

제가 생각하기에json디코딩 속도를 높이기 위한 네이티브 코드를 가지고 있었을까요?

사용 여부 확인은 어떻게 해야 하나요?

비교하기 위해, 저는 Diagnostics를 다운로드 및 설치했습니다.python-cjson모듈 및cjson.decode()같은 테스트 케이스에 대해 1초가 걸립니다.

Python 2.6과 함께 제공되는 JSON 모듈을 사용하여 사용자가 추가 모듈을 설치할 필요가 없도록 하고 싶습니다.

(Mac OS X에서 개발 중이지만 Windows XP에서도 비슷한 결과가 나옵니다.)

새로운 Yajl - Yet Another 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

라이브러리를 직접 비교할 수 있습니다.

업데이트: Ultra JSON은 더욱 빨라집니다.

플랫폼에 따라 다를 수 있지만 내장 json 모듈은 C 속도 향상을 포함하지 않고 simplejson을 기반으로 합니다.어쨌든 simplejson은 python-cjson만큼 빠르다는 것을 알게 되었기 때문에 빌트인과 같은 인터페이스를 가지고 있기 때문에 선호합니다.

try:
    import simplejson as json
except ImportError:
    import json

한동안은 이 용어가 가장 좋은 용어인 것 같습니다.앞으로도 호환성이 있을 때 퍼포먼스를 발휘합니다.

같은 파일을 10x로 해석하고 있었어요.파일 크기는 1856,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 인텔 Core i7

JSON:

simplejson==3.1.0

python-paramson==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

requests 패키지를 사용하여 요청 출력을 해석하는 사용자:

res = requests.request(...)

text = json.loads(res.text)

2017년 MacBook에서 6MB에 45초까지 응답하는 등 큰 콘텐츠의 응답 속도가 매우 느릴 수 있습니다.이는 느린 json 파서가 아니라 res.text 콜에 의한 느린 문자 집합 판정에 의해 발생합니다.

이 문제를 해결하려면 res.text를 호출하기 전에 문자 세트를 설정하고 cchardet 패키지를 사용합니다(여기도 참조).

if res.encoding is None:
    res.encoding = cchardet.detect(res.content)['encoding']

이것에 의해, 응답 텍스트 json의 파싱이 거의 순식간에 됩니다.

2. Python 2.6.1이 있습니다.json_jsonmodule에 이치노 Cjson speedups모듈이 여기에 있습니다.

>>> import _json
>>> _json
<module '_json' (built-in)>
>>> print _json.__doc__
json speedups
>>> dir(_json)
['__doc__', '__name__', '__package__', 'encode_basestring_ascii', 'scanstring']
>>> 

그럼에도 불구하고._json사용할 수 있습니다. CPython 2.6 json 。다른 구현과 비교한 적은 없지만 내부 퍼포먼스 크리티컬 루프에서는 문자열 조작으로 전환했습니다.

언급URL : https://stackoverflow.com/questions/706101/python-2-6-json-decoding-performance

반응형