파이썬을 여행하는 히치하이커를 위한 안내서 - 코드 관리와 개선, 속도, GPU 라이브러리
by Yoonkh
코드 관리와 개선
시스템 관리
서버 자동화, 시스템 모니터링, 워크플로 관리 등 시스템을 관리하고 모니터링하기 위한 도구를 소개한다.
트래비스-CL
트래비스-CL은 오픈 소스 프로젝트를 무료로 테스트 할 수 있는 분산 CI 서버이다. 파이썬 테스트를 실행하고 깃허브와 완벽히 통합되는 여러 작업자를 제공한다. 심지어 변경사항 모음이 빌드를 손상시키는지에 대해 풀리퀘스트에 주석을 달 수도 있다.
젠킨스
젠킨스는 확장 가능한 지속적 통합 엔진이며, 현재 가장 대중적인 CI 엔진이다. 윈도우, 리눅스, 맥에서 동작하며, ‘현존하는 모든 소스 코드 관리 도구’에 연결할 수 있다.
빌드봇
빌드봇은 코드 변화를 검증하는 컴파일/테스트 반복 작업을 자동화하기 위한 파이썬 시스템이다. 젠킨스와 마찬가지로 소스 코드 관리자를 폴링하여, 지침에 따라 여러 컴퓨터에서 코드를 빌드하고 테스트한 다음 작업 내용을 알려준다.
서버 자동화
솔트(Salt), 앤시블(Ansible), 퍼핏(Puppet), 셰프(Chef), CF엔진(CFEngine)은 서버 자동화 도구이며, 시스템 관리자가 수많은 실제 혹은 가상 시스템을 관리할 수 있는 우아한 방법을 제공한다.
솔트
솔트는 마스터 노드를 마스터라고 부르고, 에이전트 노드를 미니언혹은 미니언 호스트라고 부른다. 주 설계 목표는 속도이다. 네트워킹은 ZeroMQ 메시지 라이브러리를 기반으로 마스터와 미니언간 TCP연결을 사용해 수행한다.
앤시블
다른 자동화 도구에 비해 앤시블이 가지는 가장 큰 장점은 클라이언트 시스템에 파이썬만 설치되어 있어도 충분하다는 사실이다. 다른 옵션은 모두 클라이언트에 데몬이 실행되도록 하여 마스터를 폴링하며, YAML 형식의 구성 파일을 사용한다. 앤시블은 구성, 배포, 오케스트레이션 문서로서 플레이북을 사용한다. 플레이북은 YAML로 작성되며, 템플릿 생성을 위해 Jinja2를 사용한다.
퍼핏
퍼핏은 루비로 작성되었으며, 구성을 위해 퍼핏 스크립트라는 자체 언어를 제공한다. 에이전트 노드의 오케스트레이션을 담당하는 퍼핏 마스터라는 서버를 가진다. 모듈은 작고 공유할 수 있는 코드 유닛이며, 시스템 상태를 자동화하거나 정의하기 위해 작성된다.
셰프
인프라구조 코드 작성 언어로 루비를 사용하는 경우 대체로 구성 관리에 셰프를 사용한다. Chef는 Puppet과 비슷하지만, 반대의 철학을 가지고 설계되었다. Puppet은 유연성을 포기하는 대신 모든 것을 단순화하는 프레임워크를 제공하지만, Chef는 프레임워크를 거의 제공하지 않는다. 따라서 Chef는 확장이 수월한 도구이지만 그만큼 사용하기 어렵다.
CFEngine
CFEngine은 C로 작성되었기에 매우 작은 풋프린트를 가진다. 주요 설계 목표인 오류에 대한 견고함을 달성하기 위해, 분산 네트워크에서 작동하는 자율 에이전트를 사용한다.
속도
다음은 속도를 위한 옵션들이다!
스레딩
파이썬의 threading 라이브러리를 사용하면 여러 스레드를 생성할 수 있다. 전역 인터프리터 잠금(GIL) 때문에 하나의 파이썬 인터프리터는 하나의 파이썬 프로세스만 실행한다. 따라서 하나 이상의 스레드가 블로킹되는 경우에만 성능 향상이 가능하다.
멀티프로세싱
파이썬 표준 라이브러리의 multiprocessing 모듈은 추가 파이썬 인터프리터를 샐행하여 GIL을 우회하는 방법을 제공한다.
subprocess
subprocess 라이브러리는 파이썬 2.4부터 표준 라이브러리에 표준으로 포함되었으며, PEP324에 정의되어 있다.
파이파이
파이파이는 파이썬으로 구현한 파이선 구현체다. 무료인데다 빠르고, 문제가 없다면 기존 코드를 변경해줄 필요가 없다. 가장 먼저 시도해봐야 할 옵션이다.
싸이썬
불행히도 C 확장을 사용한 모든 라이브러리가 파이파이에서 작동하지 않는다. 이러한 경우를 위해 파이썬을 포함하여 C와 C++ 모듈까지 작성할 수 있도록 돕는 싸이썬이 있다. Cython은 컴파일된 C 라이브러리에서 함수를 호출할 수 있으며, 어떤 방식으로든 파이썬 객체를 조작하지 않는다는 전제하에 특정 코드 부분 근방에서 GIL을 해제할 수 있도록 하는 컨텍스트를 제공한다.
Numba
Numba는 특수 데코레이터를 통해 주석이 달린 파이썬 코드를 LLVM으로 컴파일하는 Numpy 중심의 파이썬 컴파일러이다. Numba는 LLVM을 사용해 파이썬 코드를 런타임에 실행할 수 있는 기계코드로 컴파일한다.
GPU 라이브러리
CFFI
CFFI는 C파이썬과 파이파이 모두에서 C와 인터페이스하는 간단한 매커니즘을 제공한다. C파이썬과 파이파이 간 호환성이 가장 좋기 때문에 파이파이에서 추천되는 패키지이다.
ctypes
ctypes는 C파이썬에서 C/C++과 인터페이스하는 데 있어 표준이 되는 라이브러리이다. 실제로 표준 라이브러리에 포함되어 있다.
F2PY
F2PY는 파이썬에서 포트란을 가져다 쓰는 인터페이스를 만들어주는 도구이다. Numpy에 포함되어 있으므로 Numpy를 설치하여 사용할 수 있다.
SWIG
SWIG는 파이썬을 포함한 매우 다양한 스크립트 언어를 지원한다. 인기 있고 널리 사용된느 명령줄 도구이며, C/C++ 헤더 파일을 원하는 언어에서 사용할 수 있도록 바인딩을 만들어준다.
Boost.Python
Boost.Python으로 C++ 객체 기능을 노출시키려면 비교적 많은 수작업이 필요하다. 그러나 Boost.Python은 SWGI가 제공하는 기능을 모두 제공한다. 예를 들어, C++ 객체를 파이썬에 노출하는 도구뿐만 아니라 파이썬 객체에 C++에 PyObject 형태로 노출시키는 래퍼도 있다.
Subscribe via RSS