본문 바로가기
STUDY

pypy 로 json decode 수행시 수행시간 변화

by PsychoFLOOD 2022. 3. 4.
728x90

역시 업무상 대량의 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가 적용된 형태로 전달할 수 있는 방법이 없는지는 좀 더 조사를 해봐야 할 듯 싶다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

댓글