본문 바로가기

Python

PyPy로 성능 향상시키기

728x90

Python은 생산성이 높지만 성능이 느리다. 그 원인은 고급 언어인 파이썬을 기계어로 번역하는 과정에서 발생한다.
파이썬은 대표적인 인터프리터 언어이고, 이와 반대되는 개념으로 C와 Java 등의 컴파일 언어가 존재한다.


컴파일 언어

컴파일러는 전체 코드를 한번에 기계어로 변환한다. 그래서 줄 단위로 번역을 진행하는 인터프리터에 비해 번역하는 시간은 오래 걸리르 편이다. 하지만, 한 번 컴파일 할 때 실행 파일을 생성하기 때문에 코드를 재실행할 경우 해당 실행 파일을 실행하기만 하면 된다. 따라서, 실행 시간은 인터프리터에 비해 빠른 편이다.

인터프리터 언어

인터프리터는 고급 언어를 위에서부터 한 줄씩 차례로 번역하면서 실행한다. 그렇기에 컴파일러에 비해 번역에 소모되는 시간이 적다. 하지만, 매 실행마다 코드를 번역해야 하기 때문에 일반적으로 인터프리터 언어는 실행 속도가 느린 편이다.

파이썬이 인터프리터 언어라는것에서 발생하는 이러한 단점 때문에 실제로 파이썬 컴파일러도 존재한다. 그것이 바로 Cython, Jython, IronPython, PyPy 등이고, 이 중에서 PyPy가 다른 구현체에 비해 월등히 빠른 수행 속도를 보여준다.


PyPy

앞서 언급한 것처럼 PyPy는 파이썬의 기본 인터프리터인 CPython을 대체하는 구현체이다. PyPy는 JIT(Just-In-Time) 컴파일을 사용한다. 이는 컴파일러와 인터프리터의 방식을 적절히 혼합한 것으로, 코드를 번역한 뒤 캐싱(Caching)한다. 이후에 똑같은 코드가 있다면, 이를 컴파일하는 것 대신에 캐싱해둔 값을 사용하여 기계어 코드가 매번 생성되는 것을 방ㅈ한다. 그렇기 때문에 매번 코드를 번역하고 실행하는 인터프리터의 느린 속도를 개선할 수 있다.

하지만 문제점 또한 존재한다. 코드를 저장할 공간이 필요하기 때문에 PyPy는 Python에 비해 메모리를 많이 사용한다는 단점이 있다.


결론

비교적 간단한 코드는 Python3을 활용했을 때 속도와 메모리 측면에서 우세하다.
반대로 복잡하고 반복이 많은 코드는 상황에 맞게 PyPy3르 적절히 활용하는 것이 시간 초과 오류를 해결하는 데에 도움이 될 것 이다.


다운받는 방법

- 윈도우 : http://pypy.org/download.html 에서 exe 파일, 또는 source 파일을 받아서 python setup.py install 해준다.
- 리눅스 : sudo apt-get install pypy 또는 pip install pypy
- 맥 : sudo easy_install pypy


실행 방법

test.py를 실행한다고 하자

#python으로 실행하는 코드
python test.py

#pypy로 실행하는 코드
pypy test.py

 

[출처]
https://velog.io/@seongmini/Python-Python%EA%B3%BC-PyPy
https://m.blog.naver.com/PostView.nhn?blogId=lsm_origin&logNo=120210926900&proxyReferer=https:%2F%2Fwww.google.com%2F

728x90