역시 업무상 대량의 json data를 파싱하여 작업을 할 일이 생겨서 작업하다가 궁금하여 해본 결과물이다.
대상 json 파일의 대략적인 개당 용량은 2~3MB 정도이고.. 6200여개 가량 되어서 총 용량이 대략 15GB 정도가 되는 분량이다.
json 파일을 일일히 열어서 읽은 후에 json package의 json.loads 를 통해서 json decode를 하게 되는데 이 때 시간이 오래 걸린다고 한다.
일단 그냥 python.exe으로 수행해보면 아래와 같이 대략 개당 0.15초가 소요되었으며 총 960초가 소요되었다.(error count는 파싱해서 알아내고자 했던 결과값 카운트임)
pypy3.9를 통해서 수행하게 되면(pypy는 https://www.pypy.org/download.html 에서 다운로드 받을 수 있다. 다운받은후 pypy3.9.exe 가 있는 폴더를 path에 추가하고 pypy3.9 xxx.py 로 수행하면 된다.) 아래와 같이 653초가 소요되어(무려 31%나 개선되었다.) 상당한 시간절감을 할 수 있다.(작업할당시 json 파일들은 ssd에 있지는 않고 hdd에 있었는데 만약 ssd에서 수행하면 좀 더 빨라질수도 있을듯 싶다.)
pypy로 수행하였을때 좀 더 빨라지는 이유는 pypy는 JIT(just in time compiler)를 이용하기 때문이라고 한다.
일단은 인터프리터를 통해서 수행을 하다가 병목?이 생길만한 부분을 알아서 찾아내어(아마 루프가 많이 도는 부분 많이 호출되는 함수 등으로 판단할 듯 싶다.) 그 부분은 JIT를 통해 compiling된 코드로 수행하여 빨라지는 원리이다.
(제대로 어느부분에서 시간단축이 이루어지는가를 파악하려면 파이썬 코드 프로파일링 툴을 이용해서 각 함수별 수행시간을 알아봐야 하는데 그것까지는 귀찮아서 해보지 않았다.. ㅎㅎㅎ)
가끔은 python코드를 pyinstaller 로 실행파일 형태로 전달할때도 있는데 그때에도 pypy가 적용된 형태로 전달할 수 있는 방법이 없는지는 좀 더 조사를 해봐야 할 듯 싶다.
'STUDY' 카테고리의 다른 글
UTQG지수와 실제 주행거리는 비슷할까? (4) | 2022.06.13 |
---|---|
RestAssured Junit test결과중 http request/response 데이터를 Extent Report에 추가하기 (0) | 2022.04.28 |
한글(hwp) 파이썬(python) 자동화 중 PutFieldText 의 텍스트에 줄바꿈문자(\n) 가 들어있을 때의 처리에 관하여. (4) | 2021.12.13 |
Python / 파이썬 coding시 기억해둘만한 것들 (2) | 2021.10.06 |
폰FOTA Update이후 Tethering 안됨현상. (0) | 2021.08.02 |
댓글