Python C-API 를 통해서 CPython 으로 작성된 Pydll 을 사용 (Python C-API 버전에 따라 호환 여부가 달라져서 ctypes 혹은 cffi 사용을 권장)
CPython 으로 정의된 변수 타입 외에 C언어의 매개변수로 바로 사용 할 수 있는 타입을 Ctypes 라이브러리를 통해 제공
C 로 미리 작성해둔 dll, so 를 python 에서 함수로 load 해서 사용 할 수 있게 해줌
CPython
- C/C++ 언어로 구현된 Python Interpreter (CPython 을 활용하여 라인 단위로 Code 를 Interpreting)
- CPython 으로 패키지 작성 가능 (ex:Numpy)
- Python 의 GIL 은 CPython 의 GC 때문에 존재
Python C-API 를 통해서 CPython 으로 작성된 Pydll 을 사용 (Python C-API 버전에 따라 호환 여부가 달라져서 ctypes 혹은 cffi 사용을 권장)
CPython 으로 정의된 변수 타입 외에 C언어의 매개변수로 바로 사용 할 수 있는 타입을 Ctypes 라이브러리를 통해 제공
C 로 미리 작성해둔 dll, so 를 python 에서 함수로 load 해서 사용 할 수 있게 해줌
Cython
- C 와 유사한 문법으로 함수 작성하고, CPython 패키지 형태로 만들어 줌.
- .pyx 파일을 작성해서 setup.py 실행하면, C언어 파일이 생성되고, 이 파일 내의 Python.h 를 사용하여 CPython 패키지 생성
고성능 Python 을 위한 Cython 활용하기
- CPython Level 로 작성된 패키지는 굉장히 빠름 (ex: range, array)
- 하지만 CPython 으로 패키지를 만드는건 어려우며, Python 버전에 따라 호환성이 변함 (내부 CPython 구현체 코드 변경)
- Cython 은 Cython 문법 (Pyrex 를 기초로 함) 으로 작성된 코드를 Python 버전에 맞게 CPython 으로 변환 해 줌.
(C 언어와 Python 형식 중간에 있는 문법을 가지고 있음) - Cython 으로 최종적으로 만들어지는 C파일은 CPython 으로 작성 됨. (C언어로 .c 로 변환)
- Cython 활용 시
- C/C++ Library 를 직접 활용 가능
- 메모리 관리를 직접 해야 함 (malloc)
- openmp 를 통한 병렬처리 가능
- malloc 에서 실수 발생 시, Python kernel 이 죽거나, 반환하지 않을 경우 memory leak 발생
- overflow 문제 발생 (int, long, unsigned int..)
출처 : https://devocean.sk.com/experts/techBoardDetail.do?ID=164537&boardType=experts
'프로그래밍 (이동 완료) > Python' 카테고리의 다른 글
Python Application Layouts, Structuring (0) | 2023.09.11 |
---|---|
주피터노트북 마크다운 정리 (0) | 2023.08.19 |
파이썬 패키지 배포 (0) | 2023.08.09 |
파이썬 build CLI Tool with poetry (0) | 2023.08.03 |
좋은 패키지 고르는 방법 (0) | 2023.07.30 |