책 소개
소스 파일은 아래 깃허브 페이지에서 내려 받으실 수 있습니다.
(https://github.com/AcornPublishing/parallel-python)
요약
고성능 병렬 컴퓨팅 시스템을 개발하고 유지 보수하기 위해 필요한 모든 내용을 다룬다. 먼저 병렬, 동시성, 분산의 개념부터 병렬화와 관련된 문제점과 대안을 살펴본 후, 파이썬의 스레드 기반 threading 모듈과 프로세스 기반 multiprocessing 모듈, 병렬 태스크를 수행하는 패러럴 파이썬(PP)과 분산 처리를 위한 셀러리(celery), 비동기 프로그래밍이 가능한 asyncio 모듈을 설명한다. 각 파이썬 모듈 사용법에 대한 명쾌한 이해를 돕기 위해 피보나치 수열 계산과 웹 수집기 구현 방법을 사례로 들어 간결하게 풀어나간다.
이 책에서 다루는 내용
■ 병렬화 문제 관련 기술
■ 파이썬 코드를 구현하기 위한 패러럴 파이썬 모듈 통합
■ 간단한 문제에 관한 병렬 해결책 실행.
■ 파이프와 큐를 이용한 프로세스 간의 통신
■ 셀러리 분산 태스크 큐 사용
■ 파이썬 asyncio 모듈을 이용한 비동기 I/O 구현
■ 스레드에 안전한 구조 생성
이 책의 대상 독자
능숙한 파이썬 프로그래머며 간단한 방법으로 병렬 애플리케이션에서 가용 컴퓨팅 리소스를 활용하고 싶다면, 이 책은 당신을 위한 책이다. 이 책을 최대한 활용하기 위해서는 파이썬 개발에 대한 기본 지식이 필요하다.
이 책의 구성
1장, ‘병렬, 동시성, 분산 프로그래밍 문맥 설명’에서는 병렬 프로그래밍 모델의 개념, 장단점과 구현을 다룬다. 덧붙여 병렬 솔루션을 구현하기 위한 몇몇 파이썬 라이브러리를 제시한다.
2장, ‘병렬 알고리즘 설계’에서는 병렬 알고리즘을 설계하기 위한 몇 가지 기술에 관해 논의한다.
3장, ‘병렬화 문제 확인’에서는 병렬과 관련된 문제를 예시로 소개한 후, 이 문제를 병렬 조각으로 나눌 수 있는지 분석한다.
4장, ‘threading과 concurrent.futures 모듈 사용’에서는 3장, ‘병렬화 문제 확인’에서 제시한 각 문제를 threading과 concurrent.futures 모듈을 사용해 구현하는 방법을 설명한다.
5장, ‘multiprocessing과 ProcessPoolExecutor 모듈 사용’에서는 3장, ‘병렬화 문제 확인’에서 제시한 각 문제를 multiprocessing과 ProcessPoolExecutor 모듈을 사용해 구현하는 방법을 설명한다.
6장, ‘패러렐 파이썬 활용’에서는 3장, ‘병렬화 문제 확인’에서 제시한 각 문제를 병렬 파이썬 모듈을 사용해 구현하는 방법을 제시한다.
7장, ‘셀러리를 이용한 태스크 분산’에서는 3장, ‘병렬화 문제 확인’에서 제시한 각 문제를 셀러리 분산 태스크 큐를 사용해 구현하는 방법을 제시한다.
8장, ‘비동기 프로그래밍’에서는 asyncio 모듈을 사용하는 방법과 비동기 프로그래밍에 관한 방법을 설명한다.
목차
목차
- 1장. 병렬, 동시성, 분산 프로그래밍 문맥 설명
- 병렬 프로그래밍을 왜 사용하는가
- 일반적인 병렬화
- 병렬 프로그래밍에서의 통신
- 공유 상태 이해
- 메시지 전달 이해
- 병렬 프로그래밍 문제점 확인
- 교착상태
- 기아상태
- 경쟁 조건
- 파이썬 병렬 프로그래밍 도구 찾기
- 파이썬 threading 모듈
- 파이썬 multiprocessing 모듈
- 패러렐 파이썬 모듈
- 셀러리: 분산 태스크 큐
- 파이썬 GIL에 관한 주의 사항
- 요약
- 2장. 병렬 알고리즘 설계
- 분할 정복 기법
- 데이터 분해 사용
- 파이프라인으로 태스크 분해
- 프로세스 매핑
- 독립 태스크 식별
- 데이터 교환이 필요한 태스크 식별
- 부하 분산
- 요약
- 3장. 병렬화 문제 확인
- 여러 입력으로 가장 높은 피보나치 값 얻기
- 웹 수집
- 요약
- 4장. threading과 concurrent.futures 모듈 사용
- 스레드 정의
- 스레드 사용에 따른 장단점
- 스레드의 다른 종류 이해
- 스레드 상태 정의
- thread과 _thread 중 하나를 선택
- 여러 입력으로 피보나치 수열 항을 얻기 위해 스레드 사용
- concurrent.futures 모듈을 이용해 웹 수집
- 요약
- 스레드 정의
- 5장. multiprocessing과 ProcessPoolExecutor 모듈 사용
- 프로세스 개념 이해
- 프로세스 모델 이해
- 프로세스 상태 정의
- 다중처리 통신 구현
- multiprocessing.Pipe 사용
- multiprocessing.Queue 이해
- 프로세스 모델 이해
- 여러 입력으로 피보나치 수열 항을 얻는 multiproce ssing 사용
- ProcessPoolExecutor를 이용한 웹 수집
- 요약
- 프로세스 개념 이해
- 6장. 패러렐 파이썬 활용
- 프로세스 간 통신 이해
- 네임드 파이프 살펴보기
- 파이썬으로 네임드 파이프 사용
- 네임드 파이프에 쓰기
- 네임드 파이프 읽기
- PP 발견
- SMP 아키텍처에서 PP를 이용해 피보나치 수열 항 계산
- PP를 이용해 분산 웹 수집기 만들기
- 요약
- 프로세스 간 통신 이해
- 7장. 셀러리를 이용한 태스크 분산
- 셀러리 이해
- 왜 셀러리를 사용하는가
- 셀러리 아키텍처 이해
- 태스크로 작업
- 메시지 전송(브로커) 발견
- 작업자 이해
- 결과 뒷단 이해
- 환경 설정
- 클라이언트 머신 설정
- 서버 머신 설정
- 간단한 태스크 디스패치
- 셀러리로 피보나치 수열 항 얻기
- 태스크 타입으로 큐 정의
- 셀러리를 이용해 분산 웹 수집기 만들기
- 요약
- 셀러리 이해
- 8장. 비동기 프로그래밍
- 블록킹, 논블록킹, 비동기 연산 이해
- 블록킹 연산 이해
- 논블록킹 연산 이해
- 비동기 연산 이해
- 이벤트 루프 이해
- 폴링 함수
- 이벤트 루프 사용
- asyncio 사용
- 동시 실행 루틴과 asyncio.Future 이해
- 동시 실행 루틴과 asyncio.Future 사용
- asyncio.Task 사용
- 호환성이 없는 라이브러리를 asyncio와 함께 사용하기
- 동시 실행 루틴과 asyncio.Future 이해
- 요약
- 블록킹, 논블록킹, 비동기 연산 이해