141103 최창원 파이썬 확장 프로그래밍
TRANSCRIPT
![Page 1: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/1.jpg)
0
PythonExtension with C/C++
And Porting Design인천대학교OneScore
200901319 최창원
![Page 2: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/2.jpg)
1
INDEX.
발표소개
파이썬소개
파이썬확장
확장성능
1 2 3 4
포팅(이식)설계
5
마무리으리
6
![Page 3: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/3.jpg)
2
발표 소개
1
![Page 4: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/4.jpg)
3
파이썬이 뭔대
파이썬이 확장이 왜 필요해요?
내가 만든 코드를 옮길 수 있어요? 가능?
발표 시간이 너무 길거 같에요
오늘 할 내용
![Page 5: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/5.jpg)
4
파이썬은 OOOO 이다.
1991년귀도 반 로섬에 의해 탄생
문법이 쉽고 직관적이다.
built-in 라이브러리가 많아할 수 있는게 매우 많다.
크로스 플랫폼을 지원한다.
![Page 6: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/6.jpg)
5
Feature
인터프리터위에서 실행된다.
C와 Java와 다른동적 타이핑을 사용한다.
강력한 리플렉션이 가능하다.
![Page 7: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/7.jpg)
6
인터프리터가 한 개가 아니다.
나는 Cpython !!내가 원조지
나는 IronPython이야
나는 Jython야나는Java형 하고 한몸
나는 Pypy야 ^^외계에서 왔어
![Page 8: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/8.jpg)
7
나도 완벽하진 않아.
단점도 있는데..
C/C++과 같은 컴파일 언어에 비해 속도가 느리다.
GIL때문에 멀티 스레드가 안됨.
Python 3.x의 하위 호완성 무시
![Page 9: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/9.jpg)
8
조금 느린편이야..
![Page 10: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/10.jpg)
9
C 확장을 사용한다면 어떨까?
![Page 11: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/11.jpg)
10
C 확장은 최강의 무기
![Page 12: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/12.jpg)
11
C Extension의 장점
C-Extension은 일반적인 파이썬 인터프리터 구현체인CPython에서 동작
인터프리터로 해석되는 방식이 아닌 Machine Code가 삽입되어 동작하므로 성능도 좋은 편
Python C API가 제공되므로 생각 외로 구현이 쉬움
반대로 C프로그램에서 Python Interpretor를 내장할 수도 있음
![Page 13: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/13.jpg)
12
Python Vs C Extension
![Page 14: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/14.jpg)
13
Python Vs C Extension
timeit 모듈을 사용해서 실행 시간 측정
(Measure execution time of small code snippets)
테스트 코드 Loop Count: 5만 - 20만 (증가 값 5천)
총 30번 수행
![Page 15: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/15.jpg)
14
Python Vs C Extension
(초)
루프 카운트(만)
![Page 16: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/16.jpg)
15
어떻게 확장 프로그램을 짤까?
http://qwefgh90.github.io
확장 개발 방법을 한글로 발번역 해놨습니다.
장담 못함….
참조할 만한 동영상 (Visual Studio 기준)
http://www.youtube.com/watch?v=y_eh00oE5rI
![Page 17: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/17.jpg)
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 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/18.jpg)
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 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/19.jpg)
18
어떻게 확장 프로그램을 짤까?
결론은 Python.h 에 정의된 함수를 사용해서 손쉽게 코딩을 할 수 있습니다.
![Page 20: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/20.jpg)
19
Python C Extension
python.exe
CPython 인터프리터
hellworld.py
1) 스크립트를 해석한 후
changExt.dll(pyd) 로드
2) 동적 할당을 이용한동적으로파이썬 변수 생성
4) 파이썬 API를 이용해파이썬의 모든 자원을손쉽게 생성 및 접근
3) 파이썬 API를 이용해확장 프로그램 호출
2) 파이썬 타입을 정의하는 구조체에
malloc 같은거 써서
![Page 21: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/21.jpg)
20
Red Black Tree 포팅
![Page 22: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/22.jpg)
21
Red Black Tree 포팅
![Page 23: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/23.jpg)
22
Red Black Tree 포팅
![Page 24: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/24.jpg)
23
Red Black Tree 포팅
간단한 절차
1) 라이브러리의 기능을 바탕으로 인터페이스를 구성한다. (예: 계산기 덧셈, 뺄샘)
2) C 변수로 관리할 자료구조를 생각해본다.
3) C 확장과 파이썬이 어떤 데이터를 주고 받을지 생각한다.
4) 위 내용을 바탕으로 인터페이스를 구현한다.
팁
- Python 변수에서 C자료 구조를 사용할 땐 Capsule이라는 클래스에 포인터를 삽입해서 사용한다.- Python 변수는 참조되지 않으면 쉽게 사라지므로 Capsule이 사라질 때 소멸자로 자원 해제를 한다.
![Page 25: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/25.jpg)
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 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/26.jpg)
25
Red Black Tree 포팅
![Page 27: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/27.jpg)
26
Red Black Tree 포팅
![Page 28: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/28.jpg)
27
시연
![Page 29: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/29.jpg)
28
감사합니다.
![Page 30: 141103 최창원 파이썬 확장 프로그래밍](https://reader030.vdocuments.mx/reader030/viewer/2022013105/55a4e1e31a28ab9b0e8b47fe/html5/thumbnails/30.jpg)
29
감사합니다.