본문 바로가기

프로그래밍 (이동 완료)/Python

cpython, cython, ctype

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=163835&boardType=experts&page=&searchData=&subIndex=&idList= 

 

[Python] C Library 이용해서 성능 높이기(Ctypes, 1편)

 

devocean.sk.com

 

출처 : https://devocean.sk.com/experts/techBoardDetail.do?ID=164537&boardType=experts 

 

CPython, Jython, Cython.... 니들은 정체가 뭐니?

 

devocean.sk.com