레이블이 ctypes인 게시물을 표시합니다. 모든 게시물 표시
레이블이 ctypes인 게시물을 표시합니다. 모든 게시물 표시

2017년 7월 19일 수요일

python ctypes extension

python에서 다른 언어를 사용할때, 특히 C,
ctypes은 매우 중요한 모듈중 하나입니다.

왜냐하면, ctype은 python와 c 를 이어주는 브릿지 같은것입니다.

c로 바인딩 한다는 것은 무한한 확장성을 가지게 되는 것입니다.

1. 사용하고 싶은 라이브러리가 python에는 없는데 c로 구현된 것이 있을때,
  c로 작성된 library는 엄청나게 많습니다. 이걸 그냥 쓸 수 있다는 것은 굉장한 이점이 있는것이죠
  수많은 오픈 소스 라이브러리들을 우군으로 끌어들일 수 있는 부분이 있는 것이죠,

보통 괜찮다 싶은 라이브러리 들은 공개 되어 있는 경우가 많고
호환성을 위해서라도 c로 porting이 되어있는 경우가 많습니다.

굳이 모든것을 다 만들 필요없이 적절한 타이밍에서는 공개된 모듈을 붙여서
빨리 만드는것들이 중요한 순간이 있죠,

여기서 ctypes의 진가들이 들어납니다.

2. python 은 prototype으로 사용하고, 빠른처리가 필요한 부분은 C로 작성.
보통 프로토 타입으로 python 으로 빠르게 작성을 하다가, 병목이 생기거나 하는 부분은 C로 코딩해서
변경하면, 개발 속도도 만족할 수 있고, 성능도 만족할 수 있습니다.
현재 python과 머신들은 굉장히 빠른편이지만,

3. encapsulation 파이썬 코드는 일반적으로 open이 되어있기 때문에, 숨기고 싶은 부분이 있으면
C로 작성해서 encapsulation시키면 됩니다.

그리고 c++을 붙이는 방법, c++을 바로 붙이는 방법은 지원하지는 않습니다만,
c++은 보통 extern 함수등을 이용해서, c형식으로 변경한다음에 다른 language와 붙일 수 있습니다.

파이썬도 마찬가지지요,

4. 또 다른 방법중의 하나는 boost python 을 사용하는 방법입니다.
c++의 치트키 boost algorithm역시 파이썬을 쉽게 붙이는 방법을 제공합니다.
boost library가 만능치트키입니다. ctypes보다도 쉽게 붙일 수 있습니다.



2011년 10월 29일 토요일

Python Extending and Embedding

Extending과 Embedding 말이 비슷하고 이부분 은근히 헷갈립니다.

- Extending :  파이썬에서 C모듈을 불러오는것,

- Embedding : C에서 파이썬 모듈을 불러오는 것,

실제로 인터넷등을 검색하다보면, Extending에 대한 자료는 무척이나 많습니다.

반면에 Embedding에 대한 내용은 상대적으로 빈약합니다.

제가 보기엔 둘다 중요합니다.

파이썬을 쓰다보면, 프로토 타입으로 파이썬으로 작성하고, 속도가 안나오는 부분에 대해서 C로 작성을 한다음에 Extending해서 C모듈을 불러오는 식으로 많이들 쓰시기 때문에, 그렇습니다.

반대로 임베딩의 경우는 되기야되는데, C쪽에서 파이썬 메모리관리를 문제삼아 퍼지는경우도 상당히 많기 때문에, 잘쓰이지도 않고요, 파이썬 인터프리터는 내장하는 방식이라서 덩치고 커지고 해서,  그 내용이 덜한것 같습니다.


이종 언어간의 데이터 전송은 골치아픈점이 상당히 많습니다.
이종 언어간의 I/F를 붙이는 작업을 마샬링이라고 합니다.

정석대로 Extending을 하려면, 함수도 엄청 많고, 번거롭습니다.
그래서 나온 접착모듈들이 있습니다. 기본내장은 ctypes 입니다.

이것을 사용하면, 지저분한 wrapper 작업들을 한큐에 끝내서, 사용할 수가 있습니다.

ctypes 말고도, SWIG이라는 wrapper 전문 패키지도 있고,

SWIG의 경우에는 .i 라는 interface 파일을 따로 작성해야됩니다.

ctypes관련되어서는 따로 페이지를 하나 내어서 설명을 드리도록하겠습니다.