파이썬은 어떻게 작동할까?

Python 언어는 컴파일이 아닌 인터프리터 언어로 구분이 된다. 그렇다면 컴파일은 무엇이고, 인터프리터는 뭐란 말인가?

  • 컴파일 언어(C, C++): 컴파일 언어로 작성된 코드를 실행하기 위해선 먼저 코드를 컴파일하고, 컴파일된 실행파일을 실행 해야한다.
    • 장점: 실행속도가 무지 빠르다.
    • 단점: 코드를 간단하게 수정하더라도, 수정할 때마다 컴파일이 필요하다.
  • 인터프리터 언어(Python): 인터프리터 언어는 컴파일 단계없이 바로 코드를 실행할 수 있다!
    • 장점: 코드 수정 시 결과 보기가 굉장히 용이하다.
    • 단점: 실행속도가 컴파일 언어 대비 매우 매우 느리다.

그렇다면, 인터프리터 언어는 어떻게 작동할까?

CPython vs PyPy

인터프리터 언어는 어떻게 작동하냐에 따라 CPython과 PyPy 방식이 등장한다. PyPy라는 말은 코딩 테스트할 때 기본 파이썬보다 빠르다 정도로만 알고 있었을 것이다.

# CPython 사용법
$ python ex.py
# PyPy 사용법
$ pypy ex.py

자 먼저, 기본적인 파이썬의 동작방식(CPython)을 알아보자.
https://www.youtube.com/watch?v=sQTOIkOMDIw

CPython은 기본적으로 파이썬을 C언어로 구현한 방식으로.py파일이 .pyc파일(바이트코드)로 컴파일된 후, Python Virtual Machine에서 구동된다.

반면, PyPy는 파이썬을 파이썬으로 구현한 방식이다. 또한, JIT (Just-In-Time)컴파일러를 사용하여 프로그램을 실행하는 시점에서 필요한 부분을 즉석으로 컴파일하는 방식으로 연산시간을 대폭 감소시켰다.

이것만 보면, "응? 그럼 python대신 PyPy를 쓰면 되는거 아니야?"라고 생각이 들 수 있지만 그렇지가 않다. PyPy의 가장 치명적인 단점은 Numpy와 같은 C를 내부구현으로 사용한 라이브러리에는 오히려 느려지고 에러가 발생할 수 있다는 것이다.

파이썬을 빠르게 사용할 수 있는 두가지 방법

자, 이제 우리는 파이썬의 동작방식을 알았다.
요약하자면, 기본 파이썬 인터프리터인 CPython은 파이썬을 C언어로 구현해 바이트코드로 컴파일 후 가상머신으로 구동시키는 방식이다. 그렇다면 여기서 성능 개선의 여지가 생긴다.

1. 파이썬 함수를 미리 C언어로 컴파일해 모듈화해서 사용하자!

Cython은 아예 파이썬 코드를 컴파일해 import 할 수 있는 C 확장 라이브러리를 만들어 속도를 향상시키는 방식이다.

2. PyPy에서 사용했던 JIT 컴파일 방법을 어떻게든 사용해보자!

Numba는 ypy와 마찬가지로 JIT Compiler를 이용해 속도를 향상시키는 방식이다. Pypy와 달리 사용을 위해 코드의 수정이 필요하지만 기본적으로 @jit 라는 데코레이터만 함수 위에 써주면 작동하므로 쉽게 사용 가능하다.

profile
Jacob

0개의 댓글

Powered by GraphCDN, the GraphQL CDN