문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 Python (문단 편집) === 확장 모듈 === 영어로는 Extension Module이라고 한다. 확장 모듈은 C언어를 통해 Python의 실행 속도를 극적으로 향상시킬 수 있는 방법을 제공해 준다. CPython API (Python.h)를 통해 C로 작성되므로 CPython 구현체에 의존하는데, CPython은 C로 작성된 확장 모듈을 통해 Python에 내장된 함수나 객체처럼 사용할 수 있는 기능을 제공하기 때문이다. 구체적인 방법은 [[https://docs.python.org/3/extending/extending.html|공식 문서]]에 나와 있다. 확장 모듈을 직접 작성하기 위해서는 C언어와 CPython API에 대한 상당한 지식이 요구된다. 그 예시가 궁굼하다면 [[https://github.com/numpy/numpy/blob/c8de16e440e778f4659671422ae78a6cdf7bf089/numpy/core/src/multiarray/arrayobject.c|numpy의 다차원 배열]] 소스 코드를 참고하자. 확장 모듈을 더 편하게 작성하기 위해서 아래에 서술된 패키지들을 사용할 수 있다. 다만 단순히 C로 작성된 라이브러리를 사용하는 것이 목적이라면 PyPy에서도 사용이 가능하고 호환성이 좋은 FFI를 사용하는 것이 더 바람직하다. * [anchor(Cython)]Cython: 싸이썬이라고 읽는다. 기존 Python 코드와 비슷한 문법으로 컴파일 과정을 통해 빠르게 실행할 수 있는 CPython용 확장 모듈을 제작하기 위한 패키지다. CPython의 속도를 높이고자 아예 C언어로 변환하여 컴파일하는 방법을 사용한다. Python의 문법을 확장하여 정적 타입 선언 기능을 넣어, 기존의 C 코드를 쉽게 접착할 수 있도록 만들었다. CPython C API를 이용하여 C 코드를 직접 접착하는 기존의 방식보다 훨씬 사용하기 쉽고, C언어로 변환되어 컴파일된다는 점 때문에 ctypes의 오버헤드 없이 C와 호환되는 라이브러리를 직접 사용할 수 있다. [* 심지어 C++도 사용할 수 있다.] 이것을 제대로 사용하면 적게는 열 배 정도에서 많게는 천 배 이상까지 속도 향상(C의 속도)을 경험할 수 있다. Cython은 이미 작성된 Python 코드를 재활용하기 위한 목적이 아니라 C/C++로 작성된 코드를 사용하기 위함이며 기존 Python 코드를 그대로 사용할 경우 컴파일은 되지만 유의미한 성능 향상을 얻을 수 없다. C언어 코드를 Python 코드 사이에 섞어 넣을 수 있을 정도의 C언어에 대한 지식이 필요하다. 대표적으로 사용된 예시로는 비동기 이벤트 루프인 [[https://github.com/MagicStack/uvloop|uvloop]]가 있다. 본인이 쓴 코드를 다른 사람들이 읽을 수 없게 하는 난독화(Obfuscation)에 이용되기도 한다. * pybind11 * Numba저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기