본문 바로가기

app/python

cython : python to C

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배 빠르다.... 똑같은 소스를 컴파일했을 뿐인데...

비동기나 스레드도 잘 돌아가는 것을 확인!!!

속도가 필요하면 테스트해보자!!