30
0 Python Extension with C/C++ And Porting Design 인천대학교 OneScore 200901319 최창원

141103 최창원 파이썬 확장 프로그래밍

Embed Size (px)

Citation preview

Page 1: 141103 최창원 파이썬 확장 프로그래밍

0

PythonExtension with C/C++

And Porting Design인천대학교OneScore

200901319 최창원

Page 2: 141103 최창원 파이썬 확장 프로그래밍

1

INDEX.

발표소개

파이썬소개

파이썬확장

확장성능

1 2 3 4

포팅(이식)설계

5

마무리으리

6

Page 3: 141103 최창원 파이썬 확장 프로그래밍

2

발표 소개

1

Page 4: 141103 최창원 파이썬 확장 프로그래밍

3

파이썬이 뭔대

파이썬이 확장이 왜 필요해요?

내가 만든 코드를 옮길 수 있어요? 가능?

발표 시간이 너무 길거 같에요

오늘 할 내용

Page 5: 141103 최창원 파이썬 확장 프로그래밍

4

파이썬은 OOOO 이다.

1991년귀도 반 로섬에 의해 탄생

문법이 쉽고 직관적이다.

built-in 라이브러리가 많아할 수 있는게 매우 많다.

크로스 플랫폼을 지원한다.

Page 6: 141103 최창원 파이썬 확장 프로그래밍

5

Feature

인터프리터위에서 실행된다.

C와 Java와 다른동적 타이핑을 사용한다.

강력한 리플렉션이 가능하다.

Page 7: 141103 최창원 파이썬 확장 프로그래밍

6

인터프리터가 한 개가 아니다.

나는 Cpython !!내가 원조지

나는 IronPython이야

나는 Jython야나는Java형 하고 한몸

나는 Pypy야 ^^외계에서 왔어

Page 8: 141103 최창원 파이썬 확장 프로그래밍

7

나도 완벽하진 않아.

단점도 있는데..

C/C++과 같은 컴파일 언어에 비해 속도가 느리다.

GIL때문에 멀티 스레드가 안됨.

Python 3.x의 하위 호완성 무시

Page 9: 141103 최창원 파이썬 확장 프로그래밍

8

조금 느린편이야..

Page 10: 141103 최창원 파이썬 확장 프로그래밍

9

C 확장을 사용한다면 어떨까?

Page 11: 141103 최창원 파이썬 확장 프로그래밍

10

C 확장은 최강의 무기

Page 12: 141103 최창원 파이썬 확장 프로그래밍

11

C Extension의 장점

C-Extension은 일반적인 파이썬 인터프리터 구현체인CPython에서 동작

인터프리터로 해석되는 방식이 아닌 Machine Code가 삽입되어 동작하므로 성능도 좋은 편

Python C API가 제공되므로 생각 외로 구현이 쉬움

반대로 C프로그램에서 Python Interpretor를 내장할 수도 있음

Page 13: 141103 최창원 파이썬 확장 프로그래밍

12

Python Vs C Extension

Page 14: 141103 최창원 파이썬 확장 프로그래밍

13

Python Vs C Extension

timeit 모듈을 사용해서 실행 시간 측정

(Measure execution time of small code snippets)

테스트 코드 Loop Count: 5만 - 20만 (증가 값 5천)

총 30번 수행

Page 15: 141103 최창원 파이썬 확장 프로그래밍

14

Python Vs C Extension

(초)

루프 카운트(만)

Page 16: 141103 최창원 파이썬 확장 프로그래밍

15

어떻게 확장 프로그램을 짤까?

http://qwefgh90.github.io

확장 개발 방법을 한글로 발번역 해놨습니다.

장담 못함….

참조할 만한 동영상 (Visual Studio 기준)

http://www.youtube.com/watch?v=y_eh00oE5rI

Page 17: 141103 최창원 파이썬 확장 프로그래밍

16

어떻게 확장 프로그램을 짤까?

구현 절차는 다음과 같다. (Visual Studio 기준)1) C 확장 모듈의 이름을 결정한다. (changext 로 가정한다.)

2) 결정한 모듈 이름으로 win32 - DLL 개발 프로젝트를 생성한다.

3) C:\Python27\include 폴더를 include 하고 C:\Python27\libs를 라이브러리 경로로 지정한다.

4) “PyMODINIT init모듈이름 ()” 함수를 정의한다.

5) Python API를 사용하여 함수를 작성한 후 PyMethodDef 배열을 통해 함수목록을생성한다.

6) Py_InitModule 함수를 통해 테이블을 등록하고 모듈을 초기화 한다.

7) VS2010에서 컴파일한 후 결과물인 changext.dll 파일을 changext.pyd로 바꾼다.

Page 18: 141103 최창원 파이썬 확장 프로그래밍

17

어떻게 확장 프로그램을 짤까?

링크를 따라가서 살펴봅시다. (초기화 소스)

https://github.com/qwefgh90/AlgorithmSolution/blob/master/PythonExtension2010/PythonExtension2010/main.cpp

링크를 따라가서 살펴봅시다. (구현 소스)

https://github.com/qwefgh90/AlgorithmSolution/blob/master/PythonExtension2010/PythonExtension2010/py_algorithm.cpp

Page 19: 141103 최창원 파이썬 확장 프로그래밍

18

어떻게 확장 프로그램을 짤까?

결론은 Python.h 에 정의된 함수를 사용해서 손쉽게 코딩을 할 수 있습니다.

Page 20: 141103 최창원 파이썬 확장 프로그래밍

19

Python C Extension

python.exe

CPython 인터프리터

hellworld.py

1) 스크립트를 해석한 후

changExt.dll(pyd) 로드

2) 동적 할당을 이용한동적으로파이썬 변수 생성

4) 파이썬 API를 이용해파이썬의 모든 자원을손쉽게 생성 및 접근

3) 파이썬 API를 이용해확장 프로그램 호출

2) 파이썬 타입을 정의하는 구조체에

malloc 같은거 써서

Page 21: 141103 최창원 파이썬 확장 프로그래밍

20

Red Black Tree 포팅

Page 22: 141103 최창원 파이썬 확장 프로그래밍

21

Red Black Tree 포팅

Page 23: 141103 최창원 파이썬 확장 프로그래밍

22

Red Black Tree 포팅

Page 24: 141103 최창원 파이썬 확장 프로그래밍

23

Red Black Tree 포팅

간단한 절차

1) 라이브러리의 기능을 바탕으로 인터페이스를 구성한다. (예: 계산기 덧셈, 뺄샘)

2) C 변수로 관리할 자료구조를 생각해본다.

3) C 확장과 파이썬이 어떤 데이터를 주고 받을지 생각한다.

4) 위 내용을 바탕으로 인터페이스를 구현한다.

- Python 변수에서 C자료 구조를 사용할 땐 Capsule이라는 클래스에 포인터를 삽입해서 사용한다.- Python 변수는 참조되지 않으면 쉽게 사라지므로 Capsule이 사라질 때 소멸자로 자원 해제를 한다.

Page 25: 141103 최창원 파이썬 확장 프로그래밍

24

Red Black Tree 포팅

RBTree 기능 (헤더)

https://github.com/qwefgh90/AlgorithmSolution/blob/master/PythonExtension2010/PythonExtension2010/rbtree.h

RBTree를 위한 C확장

https://github.com/qwefgh90/AlgorithmSolution/blob/master/PythonExtension2010/PythonExtension2010/py_rbtree.h

Page 26: 141103 최창원 파이썬 확장 프로그래밍

25

Red Black Tree 포팅

Page 27: 141103 최창원 파이썬 확장 프로그래밍

26

Red Black Tree 포팅

Page 28: 141103 최창원 파이썬 확장 프로그래밍

27

시연

Page 29: 141103 최창원 파이썬 확장 프로그래밍

28

감사합니다.

Page 30: 141103 최창원 파이썬 확장 프로그래밍

29

감사합니다.