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

Mais conteúdo relacionado

Mais procurados

니름: 쉬운 SOA 단위 테스트
니름: 쉬운 SOA 단위 테스트니름: 쉬운 SOA 단위 테스트
니름: 쉬운 SOA 단위 테스트효준 강
 
Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)정명훈 Jerry Jeong
 
Boost 라이브리와 C++11
Boost 라이브리와 C++11Boost 라이브리와 C++11
Boost 라이브리와 C++11OnGameServer
 
파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수Yeon Soo Kim
 
Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택JinTaek Seo
 
파이썬 튜토리얼 (Python tutorial)
파이썬 튜토리얼 (Python tutorial)파이썬 튜토리얼 (Python tutorial)
파이썬 튜토리얼 (Python tutorial)민지 김
 
Sublime Text 3 for python and django
Sublime Text 3 for python and djangoSublime Text 3 for python and django
Sublime Text 3 for python and djangoraccoony
 
Writing Fast Code (KR)
Writing Fast Code (KR)Writing Fast Code (KR)
Writing Fast Code (KR)Younggun Kim
 
Python vs Java @ PyCon Korea 2017
Python vs Java @ PyCon Korea 2017Python vs Java @ PyCon Korea 2017
Python vs Java @ PyCon Korea 2017Insuk (Chris) Cho
 
모두의 JIT 컴파일러
모두의 JIT 컴파일러모두의 JIT 컴파일러
모두의 JIT 컴파일러우경 성
 
Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료Han Sung Kim
 
파이썬(Python) 소개
파이썬(Python) 소개파이썬(Python) 소개
파이썬(Python) 소개Jin wook
 
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)성일 한
 
141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작Changwon Choe
 
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기Joongi Kim
 
알고리즘 시각화 라이브러리 ipytracer 개발기
알고리즘 시각화 라이브러리 ipytracer 개발기알고리즘 시각화 라이브러리 ipytracer 개발기
알고리즘 시각화 라이브러리 ipytracer 개발기Han Lee
 
20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영Tae Young Lee
 

Mais procurados (20)

니름: 쉬운 SOA 단위 테스트
니름: 쉬운 SOA 단위 테스트니름: 쉬운 SOA 단위 테스트
니름: 쉬운 SOA 단위 테스트
 
Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)
 
Boost 라이브리와 C++11
Boost 라이브리와 C++11Boost 라이브리와 C++11
Boost 라이브리와 C++11
 
파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수
 
Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택
 
파이썬 튜토리얼 (Python tutorial)
파이썬 튜토리얼 (Python tutorial)파이썬 튜토리얼 (Python tutorial)
파이썬 튜토리얼 (Python tutorial)
 
Sublime Text 3 for python and django
Sublime Text 3 for python and djangoSublime Text 3 for python and django
Sublime Text 3 for python and django
 
Writing Fast Code (KR)
Writing Fast Code (KR)Writing Fast Code (KR)
Writing Fast Code (KR)
 
Python vs Java @ PyCon Korea 2017
Python vs Java @ PyCon Korea 2017Python vs Java @ PyCon Korea 2017
Python vs Java @ PyCon Korea 2017
 
모두의 JIT 컴파일러
모두의 JIT 컴파일러모두의 JIT 컴파일러
모두의 JIT 컴파일러
 
WTL 소개
WTL 소개WTL 소개
WTL 소개
 
Boost
BoostBoost
Boost
 
Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료
 
파이썬(Python) 소개
파이썬(Python) 소개파이썬(Python) 소개
파이썬(Python) 소개
 
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
파이썬 플라스크로 배우는 웹프로그래밍 #1 (ABCD Foundation)
 
141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작
 
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
 
알고리즘 시각화 라이브러리 ipytracer 개발기
알고리즘 시각화 라이브러리 ipytracer 개발기알고리즘 시각화 라이브러리 ipytracer 개발기
알고리즘 시각화 라이브러리 ipytracer 개발기
 
요즘웹개발
요즘웹개발요즘웹개발
요즘웹개발
 
20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영20150306 파이썬기초 IPython을이용한프로그래밍_이태영
20150306 파이썬기초 IPython을이용한프로그래밍_이태영
 

Destaque

Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Ki-Hwan Kim
 
Python 내장 함수
Python 내장 함수Python 내장 함수
Python 내장 함수용 최
 
Character Encoding in python
Character Encoding in pythonCharacter Encoding in python
Character Encoding in pythondaesung7kang
 
연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015
연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015
연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015Jeongkyu Shin
 
파이썬+네트워크 20160210
파이썬+네트워크 20160210파이썬+네트워크 20160210
파이썬+네트워크 20160210Yong Joon Moon
 
병렬 프로그래밍
병렬 프로그래밍병렬 프로그래밍
병렬 프로그래밍준혁 이
 
라즈베리파이 와 스카이로버 나노에 만남
라즈베리파이 와 스카이로버 나노에 만남라즈베리파이 와 스카이로버 나노에 만남
라즈베리파이 와 스카이로버 나노에 만남Jae Sang Lee
 
20151219_(python_korea)_How_to_automate_webhacking.kr_with_Python_presentation
20151219_(python_korea)_How_to_automate_webhacking.kr_with_Python_presentation20151219_(python_korea)_How_to_automate_webhacking.kr_with_Python_presentation
20151219_(python_korea)_How_to_automate_webhacking.kr_with_Python_presentationre4lfl0w
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임codenavy
 
Java와 Python의 만남: Jython과 Sikuli
Java와 Python의 만남: Jython과 SikuliJava와 Python의 만남: Jython과 Sikuli
Java와 Python의 만남: Jython과 Sikuli용 최
 
병렬프로그래밍과 Cuda
병렬프로그래밍과 Cuda병렬프로그래밍과 Cuda
병렬프로그래밍과 CudaSeok-joon Yun
 
컬러베스.Compressed
컬러베스.Compressed컬러베스.Compressed
컬러베스.Compressedhongjjjjjj
 
Python Recipes for django girls seoul
Python Recipes for django girls seoulPython Recipes for django girls seoul
Python Recipes for django girls seoulJoeun Park
 
Python on Android
Python on AndroidPython on Android
Python on Android용 최
 
파이썬 병렬프로그래밍
파이썬 병렬프로그래밍파이썬 병렬프로그래밍
파이썬 병렬프로그래밍Yong Joon Moon
 
triple EX_ 테스크 분석과 종합
triple EX_ 테스크 분석과 종합triple EX_ 테스크 분석과 종합
triple EX_ 테스크 분석과 종합Hyunjin Yoo
 
파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기Yong Joon Moon
 

Destaque (20)

Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
 
PyCon Korea 2015
PyCon Korea 2015PyCon Korea 2015
PyCon Korea 2015
 
PyPy
PyPyPyPy
PyPy
 
5G Coding
5G Coding5G Coding
5G Coding
 
Python 내장 함수
Python 내장 함수Python 내장 함수
Python 내장 함수
 
Character Encoding in python
Character Encoding in pythonCharacter Encoding in python
Character Encoding in python
 
연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015
연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015
연구자 및 교육자를 위한 계산 및 분석 플랫폼 설계 - PyCon KR 2015
 
파이썬+네트워크 20160210
파이썬+네트워크 20160210파이썬+네트워크 20160210
파이썬+네트워크 20160210
 
병렬 프로그래밍
병렬 프로그래밍병렬 프로그래밍
병렬 프로그래밍
 
라즈베리파이 와 스카이로버 나노에 만남
라즈베리파이 와 스카이로버 나노에 만남라즈베리파이 와 스카이로버 나노에 만남
라즈베리파이 와 스카이로버 나노에 만남
 
20151219_(python_korea)_How_to_automate_webhacking.kr_with_Python_presentation
20151219_(python_korea)_How_to_automate_webhacking.kr_with_Python_presentation20151219_(python_korea)_How_to_automate_webhacking.kr_with_Python_presentation
20151219_(python_korea)_How_to_automate_webhacking.kr_with_Python_presentation
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임
 
Java와 Python의 만남: Jython과 Sikuli
Java와 Python의 만남: Jython과 SikuliJava와 Python의 만남: Jython과 Sikuli
Java와 Python의 만남: Jython과 Sikuli
 
병렬프로그래밍과 Cuda
병렬프로그래밍과 Cuda병렬프로그래밍과 Cuda
병렬프로그래밍과 Cuda
 
컬러베스.Compressed
컬러베스.Compressed컬러베스.Compressed
컬러베스.Compressed
 
Python Recipes for django girls seoul
Python Recipes for django girls seoulPython Recipes for django girls seoul
Python Recipes for django girls seoul
 
Python on Android
Python on AndroidPython on Android
Python on Android
 
파이썬 병렬프로그래밍
파이썬 병렬프로그래밍파이썬 병렬프로그래밍
파이썬 병렬프로그래밍
 
triple EX_ 테스크 분석과 종합
triple EX_ 테스크 분석과 종합triple EX_ 테스크 분석과 종합
triple EX_ 테스크 분석과 종합
 
파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기
 

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

200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬
200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬
200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬Joohyun Han
 
200720 바이오협회 생물정보학 파이썬 강의
200720 바이오협회 생물정보학 파이썬 강의 200720 바이오협회 생물정보학 파이썬 강의
200720 바이오협회 생물정보학 파이썬 강의 Joohyun Han
 
swig를 이용한 C++ 랩핑
swig를 이용한 C++ 랩핑swig를 이용한 C++ 랩핑
swig를 이용한 C++ 랩핑NAVER D2
 
맨땅에서 AI학습플랫폼을 만들기까지
맨땅에서 AI학습플랫폼을 만들기까지맨땅에서 AI학습플랫폼을 만들기까지
맨땅에서 AI학습플랫폼을 만들기까지Sunwoo Park
 
PyQGIS와 PyQt를 이용한 QGIS 기능 확장
PyQGIS와 PyQt를 이용한 QGIS 기능 확장PyQGIS와 PyQt를 이용한 QGIS 기능 확장
PyQGIS와 PyQt를 이용한 QGIS 기능 확장MinPa Lee
 
자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능Dexter Jung
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10흥배 최
 
Kotlin 2.0을 통해 알아보는 코틀린의 미래
Kotlin 2.0을 통해 알아보는 코틀린의 미래Kotlin 2.0을 통해 알아보는 코틀린의 미래
Kotlin 2.0을 통해 알아보는 코틀린의 미래Leonardo YongUk Kim
 
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표iFunFactory Inc.
 
회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기Dexter Jung
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발Jeongkyu Shin
 
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅Youngmin Koo
 
[170403 2주차]C언어 A반
[170403 2주차]C언어 A반[170403 2주차]C언어 A반
[170403 2주차]C언어 A반arundine
 
Lecture 1: Introduction to Python and TensorFlow
Lecture 1: Introduction to Python and TensorFlowLecture 1: Introduction to Python and TensorFlow
Lecture 1: Introduction to Python and TensorFlowSang Jun Lee
 
네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한
네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한
네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한NAVER Engineering
 

Semelhante a 141103 최창원 파이썬 확장 프로그래밍 (20)

200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬
200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬
200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬
 
200720 바이오협회 생물정보학 파이썬 강의
200720 바이오협회 생물정보학 파이썬 강의 200720 바이오협회 생물정보학 파이썬 강의
200720 바이오협회 생물정보학 파이썬 강의
 
04 1 함수
04 1 함수04 1 함수
04 1 함수
 
swig를 이용한 C++ 랩핑
swig를 이용한 C++ 랩핑swig를 이용한 C++ 랩핑
swig를 이용한 C++ 랩핑
 
맨땅에서 AI학습플랫폼을 만들기까지
맨땅에서 AI학습플랫폼을 만들기까지맨땅에서 AI학습플랫폼을 만들기까지
맨땅에서 AI학습플랫폼을 만들기까지
 
08 모듈
08 모듈08 모듈
08 모듈
 
PyQGIS와 PyQt를 이용한 QGIS 기능 확장
PyQGIS와 PyQt를 이용한 QGIS 기능 확장PyQGIS와 PyQt를 이용한 QGIS 기능 확장
PyQGIS와 PyQt를 이용한 QGIS 기능 확장
 
자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10
 
Kotlin 2.0을 통해 알아보는 코틀린의 미래
Kotlin 2.0을 통해 알아보는 코틀린의 미래Kotlin 2.0을 통해 알아보는 코틀린의 미래
Kotlin 2.0을 통해 알아보는 코틀린의 미래
 
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
2019 아이펀팩토리 Dev Day 세션1 네트워크 프로그래밍 개론 - 문대경 대표
 
회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기
 
16 1 상속과super()
16 1 상속과super()16 1 상속과super()
16 1 상속과super()
 
20160126_python
20160126_python20160126_python
20160126_python
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
 
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
 
[170403 2주차]C언어 A반
[170403 2주차]C언어 A반[170403 2주차]C언어 A반
[170403 2주차]C언어 A반
 
Lecture 1: Introduction to Python and TensorFlow
Lecture 1: Introduction to Python and TensorFlowLecture 1: Introduction to Python and TensorFlow
Lecture 1: Introduction to Python and TensorFlow
 
01_2_파이썬설치
01_2_파이썬설치 01_2_파이썬설치
01_2_파이썬설치
 
네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한
네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한
네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한
 

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

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

Notas do Editor

  1. class ClassA(object):     email = ''     name = ''   strong = ClassA() strong.email = 'kelp[at]phate.org' strong.name = 'Kelp'   모듈, 클래스, 객체와 같은 언어의 요소가 내부에서 접근 for name in dir(strong):     attr = getattr(strong.__class__, name)     if not callable(attr) and name.find('__') != 0:         print('%s = %s' % (name, getattr(strong, name)))
  2. from socket import socket socket = socket(); socket.connect(('www.naver.com',80)) recv = socket.send('GET / http/1.1\r\n\r\n') socket.recv(1024)