파이썬 동시성 프로그래밍 [명료하고 훌륭한 동시성 파이썬 코드 작성하고 개념 이해하기]
- 원서명Learning Concurrency in Python: Speed up your Python code with clean, readable, and advanced concurrency techniques (ISBN 9781787285378)
- 지은이엘리엇 포브스(Elliot Forbes)
- 옮긴이이창화
- ISBN : 9791161752044
- 30,000원
- 2018년 09월 18일 펴냄 (절판)
- 페이퍼백 | 388쪽 | 188*235mm
- 시리즈 : acorn+PACKT, 프로그래밍 언어
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
요약
파이썬 스레드 라이브러리를 사용해 멀티스레딩 모델과 시스템을 배운다. 스레드 풀, 프로세스 풀, 퓨처 객체를 소개하고, 멀티프로세싱도 배워본다. asyncio과 RxPY 라이브러리를 활용해 이벤트-반응형 및 리액트 프로그래밍을 살펴보고, PyCUDA 같은 라이브러리를 활용해 GPU를 활용한 파이썬 프로그램을 작성한다. 그 외에도 Theano, Numba, PyUnit, Pdb 등 다양한 라이브러리를 소개하고 이를 활용한 예제와 개념을 하나씩 알아본다.
이 책에서 다루는 내용
█ 파이썬 스레딩 및 멀티프로세싱
█ 스레드를 통한 동시성 이해
█ 자식 스레드의 예외 관리
█ 동시성 시스템의 어려움(공유 자원)
█ 순차적인 프로세스 통신(CSP)으로 동시성 시스템 구축
█ 동시성 시스템 유지 및 관리
█ 동시성 시스템과 리액트 프로그래밍
█ 특정 문제 해결과 GPU
이 책의 대상 독자
동시성 프로그래밍을 시작하려는 파이썬 개발자들을 대상으로 하며, 기본적인 파이썬 지식을 알고 있다는 가정하에 집필했다.
이 책의 구성
1장, ‘시작하기!’에서는 스레드와 프로세스를 소개한다. 동시성 애플리케이션을 구성하는 데 있어 파이썬의 한계점도 살펴본다.
2장, ‘병렬화’에서는 동시성과 병렬화의 차이점을 다양한 관점으로 접근해본다. 이 두 개념을 어떻게 CPU에 활용하고, 나아가 컴퓨터 시스템 디자인과 동시성 및 병렬화 프로그래밍이 무엇인지 배운다.
3장, ‘스레드 라이프’에서는 파이썬 내장 스레드 라이브러리에 대해 자세히 다루고, 여러 가지 스레드 타입도 살펴본다. 멀티스레딩 모델과 사용자 스레드를 로우 레벨의 커널 스레드로 만드는 방법도 다룬다.
4장, ‘스레드 간의 동기화’에서는 동시성 파이썬 애플리케이션에 영향을 미치는 요인을 살펴본다. 데드락의 개념과 ‘철학자의 저녁식사’ 문제가 시스템에 어떤 영향을 주는지 알아본다.
5장, ‘스레드 간의 통신’에서는 멀티스레드 시스템에서 통신을 구현하는 여러 메커니즘을 다룬다. 파이썬에 내장된 스레드 세이프 큐에 대해 자세히 배워본다.
6장, ‘디버깅과 벤치마킹’에서는 제품 출시에 앞서 동시성 시스템에 버그가 생기지 않았는지 확인하는 기술을 여러 측면에서 살펴본다. 코드상 논리 구조에 문제가 없는지 테스트하는 방법도 알아본다.
7장, ‘실행자와 풀’에서는 스레드 풀, 프로세스 풀, 퓨처 객체에 대한 모든 것을 다룬다. 스레드와 프로세스 풀을 인스턴스화하는 방법과 그 장점에 대해 살펴본다.
8장, ‘멀티프로세싱’에서는 멀티프로세싱의 개념과 이를 시스템에서 어떻게 활용하는지 배운다. 생성부터 종료까지 스레드 라이프에 대해 살펴본다.
9장, ‘이벤트 기반 프로그래밍’에서는 이벤트 기반 프로그래밍의 개념을 살펴보며, asyncio 라이브러리와 이벤트 기반 시스템이 어떻게 사용되는지 다룬다.
10장, ‘리액트 프로그래밍’에서는 리액트 프로그래밍의 핵심 원리를 깨우친다. 리액트 프로그래밍과 이벤트 기반 프로그래밍의 주된 차이점을 살펴보고, RxPY 파이썬 라이브러리를 소개한다.
11장, ‘GPU 사용하기’에서는 데이터 사이언티스트가 실제 GPU를 활용하는 부분을 래퍼 라이브러리 활용법과 함께 소개한다.
12장, ‘솔루션 선택하기’에서는 지금까지 다루지 못한 라이브러리를 간단히 소개한다. 파이썬 프로그램에서 어떤 라이브러리와 개념을 적재적소에 사용할지 그 과정을 배워본다.
목차
목차
- 1장. 시작하기
- 동시성 개념의 역사
- 스레드와 멀티스레드
- 스레드란?
- 멀티스레딩이란?
- 프로세스
- 프로세스의 속성
- 멀티프로세싱
- 이벤트 기반 프로그래밍
- 터틀
- 반응형 프로그래밍
- ReactiveX(RxPY)
- GPU 프로그래밍
- PyCUDA
- OpenCL
- Theano
- 파이썬의 한계
- Jython
- IronPython
- 동시에 그림 다운로드하기
- 순차적으로 다운로드하기
- 동시에 다운로드하기
- 멀티프로세싱으로 소인수 찾기
- 순차적으로 소인수 구하기
- 동시에 소인수 구하기
- 요약
- 2장. 병렬화
- 동시성에 대한 이해
- 동시성 시스템의 특징
- I/O 문제
- 병렬화 이해하기
- CPU 제약 문제
- CPU상에서 어떻게 작동될까?
- 단일 코어 CPU
- 클록 속도
- 마르텔리 범용성 모델
- 시분할(작업 스케줄러)
- 멀티 코어 프로세서
- 시스템 아키텍처 스타일
- SISD
- SIMD
- MISD
- MIMD
- 컴퓨터 메모리 아키텍처 스타일
- UMA
- NUMA
- 요약
- 동시성에 대한 이해
- 3장. 스레드 라이프
- 파이썬에서의 스레드
- 스레드 상태
- 상태 플로우 차트
- 여러 형태의 스레드
- 스레드를 시작하는 방법
- 포킹
- 스레드 데몬화
- 파이썬에서 스레드 다루기
- 스레드 시작하기
- 스레드를 이용해 프로그램 속도 낮추기
- 현재 실행 중인 모든 스레드의 개수 구하기
- 현재 스레드 나타내기
- 메인 스레드
- 모든 스레드 열거하기
- 스레드 확인하기
- 스레드 종료하기
- 고아 프로세스
- 운영체제는 어떻게 스레드를 다룰까?
- 프로세스 생성과 스레드 생성
- 멀티스레딩 모델
- 일대일 스레드 매핑
- 다대일
- 다대다
- 요약
- 파이썬에서의 스레드
- 4장. 스레드 간 동기화
- 스레드 간 동기화
- 철학자의 저녁식사
- 경합 조건
- 위험 영역
- 공유 자원과 데이터 경합
- join 메소드
- 락
- R락
- R락과 일반적인 락
- 컨디션
- 세마포어
- 한정된 세마포어
- 이벤트
- 배리어
- 요약
- 스레드 간 동기화
- 5장. 스레드 간의 통신
- 기본적인 자료 구조
- 세트
- 데코레이터
- 클래스 데코레이터
- 리스트
- 큐
- queue 객체
- deque 객체
- 원소 추가하기
- 원소 꺼내기
- 원소 삽입하기
- 회전
- 자체적인 스레드 세이프 통신 구조 정의하기
- 웹 크롤러 예제
- 요약
- 기본적인 자료 구조
- 6장. 디버깅과 벤치마킹
- 테스트 전략
- 왜 테스트를 해야 하는가?
- 동시성 소프트웨어 시스템 테스트
- 어떤 것을 테스트할까?
- 단위 테스트
- 동시성 코드의 단위 테스트
- 통합 테스트
- 디버깅
- 단일 스레드에서 작동해보기
- Pdb
- 자식 스레드에서 예외 처리하기
- 벤치마킹
- timeit 모듈
- 데코레이터 활용하기
- 타이밍 컨텍스트 관리자
- 프로파일링
- cProfile
- line_profiler 툴
- 메모리 프로파일링
- 요약
- 테스트 전략
- 7장. 실행자와 풀
- 동시성 퓨처
- Executor 객체
- 퓨처 객체
- 퓨처 객체 내의 메소드
- 퓨처 객체의 단위 테스트
- 호출 가능한 작업 취소하기
- 결과 얻어내기
- as_completed 사용하기
- 콜백 설정하기
- 예외 클래스
- ProcessPoolExecutor
- ProcessPoolExecutor 생성하기
- 컨텍스트 관리자
- 연습
- 연산 속도 높이기
- 웹 크롤러 성능 높이기
- 계획하기
- 연습: 각 페이지에서 크롤링한 더 많은 정보 얻기
- 파이썬 2
- 요약
- 동시성 퓨처
- 8장. 멀티프로세싱
- GIL 작업
- 하위 프로세스 활용하기
- 프로세스 라이프
- fork를 사용해 프로세스 시작하기
- 프로세스 스폰
- forkserver
- 데몬 프로세스
- PID를 이용해 프로세스 확인하기
- 프로세스 종료하기
- 현재 프로세스 얻기
- 프로세스를 하위 클래스화하기
- 멀티프로세싱 풀
- concurrent
- 컨텍스트 관리자
- 프로세스 풀에 작업 전달하기
- 프로세스 간 통신
- 파이프
- 파이프로 작업하기
- 예외 처리하기
- multiprocessing
- 네임스페이스
- 큐
- Listener와 Client 클래스
- 로깅
- 예제
- 순차적인 프로세스 통신하기
- PyCSP
- 요약
- GIL 작업
- 9장. 이벤트 기반 프로그래밍
- 이벤트 기반 프로그래밍
- 이벤트 루프
- asyncio
- 시작하기
- 이벤트 루프
- 태스크
- 태스크 함수
- 퓨처
- 코루틴
- 트랜스포트
- 프로토콜
- 코루틴 간의 동기화
- 세마포어와 한정된 세마포어
- 하위 프로세스
- asyncio 프로그램 디버깅
- 디버깅 모드
- 트위스티드
- 간단한 웹 서버 예제
- gevent
- 이벤트 루프
- greenlet
- 예제: 호스트이름
- monkey 패키지를 이용한 패치
- 요약
- 이벤트 기반 프로그래밍
- 10장. 리액트 프로그래밍
- 리액트 프로그래밍의 기본
- 진정한 리액트 프로그래밍
- ReactiveX(RX)
- RxPY 설치하기
- 관찰 가능 속성
- 람다 함수
- 오퍼레이터와 연결
- 다양한 오퍼레이터
- 핫 및 콜드 관찰 가능 속성
- 이벤트 내보내기
- 멀티캐스팅
- 관찰 가능 속성 연결하기
- 동시성
- PyFunctional
- 설치와 공식 문서
- 간단한 예제
- 스트림, 변환, 액션
- 필터링 리스트
- SQLite3 읽기 및 쓰기
- 압축된 파일
- 병렬 실행
- 요약
- 리액트 프로그래밍의 기본
- 11장. GPU 사용하기
- GPU 소개
- 왜 GPU를 사용하는가?
- 데이터 사이언스
- CUDA
- 엔비디아 그래픽 카드 없이 CUDA로 작업하기
- PyCUDA
- 특징
- 간단한 예제
- 커널
- GPU 배열
- Numba
- 개관
- Numba의 특징
- 하드웨어 간 호환성
- CUDA 기반 GPU에서의 Numba
- AMD APU에서의 Numba
- Accelerate
- Theano
- 필요사항
- 시작하기
- GPU에서 Theano 사용하기
- 멀티 GPU 활용하기
- PyOpenCL
- 예제
- 요약
- 12장. 솔루션 선택하기
- 책에서 다루지 못한 라이브러리
- GPU
- 이벤트 기반과 리액트 라이브러리
- 데이터 사이언스
- 시스템 디자인하기
- 요구사항
- 디자인
- 디자인과 관련된 책
- 연구
- 책에서 다루지 못한 라이브러리