Cython 은 CPython 확장 모듈을 생성하고 이를 이용하여 외부 함수 인터페이스와 실행 속도 향상과 외부 라이브러리의 연동을 보다 향상 시킬 수 있도록 고안된 컴파일 언어이다
Cython 은 pyx 확장명을 사용하고, 컴파일 과정을 통하여 파이썬에서 import 형태로 사용될 수 있다.
컴파일은 다음 setup.py 를 이용하여 컴파일할 수 있다
1. cython 설치!!
$ pip install cython
2. 변환할 파이썬 코드를 pyx 확장자로 생성
1
2
3
4
|
# test_cython.pyx
def ret_list(n):
return [i for i in range(n)]
|
cs |
3. setup.py 파일 생성
1
2
3
4
5
|
# setup.py
# -*- coding: utf-8 -*- from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules=cythonize("test_cython.pyx")) # 어떤 파일을 변환할지 지정
|
cs |
4. 커맨드에서 cython 실행
$ python3 setup.py build_ext --inplace
실행후 아래와 같이 *c 파일인 c로 컴파일된 파일을 얻을 수 있다.
해당 코드를 실행하는 것은 똑같이 import로 하면 된다.
아래는 같은 코드의 python 코드와 cython 코드의 시간 측정이다.
1
2
3
4
5
6
7
8
|
import timeit
print("test_cython", timeit.timeit('sum(test_cython.ret_list(100000))', "import test_cython", number=1000))
def ret_list(n):
return [i for i in range(n)]
print("test default", timeit.timeit('sum(ret_list(100000))', "from __main__ import ret_list", number=1000))
|
cs |
약 1.5배 빠르다.... 똑같은 소스를 컴파일했을 뿐인데...
비동기나 스레드도 잘 돌아가는 것을 확인!!!
속도가 필요하면 테스트해보자!!
'app > python' 카테고리의 다른 글
'utf-8' codec can't decode byte 0xff in position 0: invalid start byte (0) | 2022.11.01 |
---|---|
pypy (0) | 2021.08.04 |
ERROR: Cannot install -r /requirements.txt because these package versions have conflicting dependencies. (0) | 2021.07.26 |
parquet (0) | 2021.07.05 |
pickle (0) | 2021.06.28 |