로그인회원가입장바구니고객센터마이페이지회사소개
kangcom
전체
Home >   >   > 

『파이썬 동시성 프로그래밍: 명료하고 훌륭한 동시성 파이썬 코드 작성하고 개념 이해하기』

   
지은이 엘리엇 포브스   |   출판사 에이콘  |   발행일 2018년 09월 18일
 
클릭하시면 큰 도서이미지를 보실 수 있습니다.
판매가 30,000원27,000원 10%
마일리지 1% 300원
발행일 2018-09-18
ISBN 1161752048 | 9791161752044
기타정보 번역서 | 388쪽
예상출고일 1~2일 이내 (근무일기준)
배송비 무료배송
   
일반
종합지수 0p
월간지수 50p 2 위
   
 

★ 요약 ★



파이썬 스레드 라이브러리를 사용해 멀티스레딩 모델과 시스템을 배운다. 스레드 풀, 프로세스 풀, 퓨처 객체를 소개하고, 멀티프로세싱도 배워본다. 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

__요약





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

____이벤트 기반과 리액트 라이브러리

____데이터 사이언스

__시스템 디자인하기

____요구사항

____디자인

____디자인과 관련된 책

____연구

__요약

엘리엇 포브스(Elliot Forbes)

2년간 JP모건체이스(JPMorgan Chase)에서 풀타임 소프트웨어 엔지니어로 일했다. 대학 생활 동안 웹 솔루션 개발 프리랜서로 일했으며, 2015년 스코틀랜드의 스트라스클라이드 대학교를 졸업했다.

Go 언어, Node.js, 자바 등 다양한 언어를 다루며 기업용 동시성 시스템 개발에 많은 시간을 보냈다. 이러한 경험들이 이 책을 집필한 계기가 됐다.

런던의 바클리스 투자 은행(Barclays Investment Bank)에서 인턴으로 있었으며, 지난 3년간 여러 소프트웨어 개발 웹사이트를 운영했다.





★ 옮긴이의 말 ★



PYPL, Tiobe를 참고하면 파이썬 언어의 사용 빈도 순위는 모두 5위 안에 들만큼 전 세계의 많은 사람이 사용하고 있다. 그만큼 쉬운 문법 구조와 사용 및 편리함을 나타내고 있다.

컴퓨터 및 전자 관련 전공으로 입학하면 가장 먼저 배우는 것이 ‘컴퓨터 구조’다. 폰 노이만의 현대식 컴퓨터 개발부터 시작해, 오늘날 운영체제의 원리까지 길고 긴 여정이 시작된다. 그중 가장 기본적인 컴퓨터 구조 및 원리에서 동시성과 병렬화를 빼놓을 수 없다. 이러한 개념을 적용하는 이유는 바로 프로그램의 속도 때문이다. 더 빠르고 효율적으로 연산을 수행하고자 적용하는데, 이제 막 입문한 사람들에게 쉽지만은 않다.

이 책은 스레드, 프로세스, 실행자, 풀, 이벤트 기반 및 리액트 프로그래밍 같은 컴퓨터 과학의 개념과 함께 이를 파이썬 프로그래밍으로 풀어본다. 어려운 개념과 설명을 쉽게 예제 형식으로 풀었으며, 실제로 이러한 개념을 적용할 때 사용되는 다양한 라이브러리를 적극적으로 이용한다.

먼저 동시성과 병렬화의 기본적인 개념을 소개한다. 컴퓨터 아키텍처와 관련된 부분도 쉽게 설명하고 있다. 다음으로 스레드와 관련해 설명한다. 큐 자료 구조와 접목한 스레드 프로그램을 작성해본다. 6장에서는 파이썬 프로그램의 디버깅과 벤치마킹을 해본다. 7장과 8장에서는 퓨처 객체, ProcessPoolExecutor, 멀티프로세싱에 대해 살펴본 후, 9장에서 asyncio 라이브러리를 활용해 이벤트 기반 프로그래밍을 배워본다. 10장에서는 RxPY 라이브러리를 이용해 리액트 프로그래밍을 알아보고, 11장에서는 GPU를 활용해 본다.

입문 및 예제에 초점이 맞춰진 책이다 보니, 깊은 개념에 대한 설명이 조금 부족할 수 있다. 각주 및 참고 박스를 통해 최대한 친절하게 전달하고자 노력했다. 대부분 윈도우 운영체제 환경에서 정상적으로 실행되지만, 스레드나 프로세스를 다루는 예제에서는 리눅스 환경을 이용하거나 각주를 참고하자.

최근에는 초등학교부터 코딩 열풍이 분다고 한다. 사교육 시장에서는 단순한 암기와 주입식 코딩 교육이 많다고 한다. 가장 중요한 것은 흥미다. 내가 좋아하는 부분에 흥미를 가지고 즐겁게 프로그래밍을 배우고, 모르는 부분은 스스로 찾아보고 생각하는 과정이 가장 중요하다. 때로는 정교한 알고리즘을 설계해야 하며, 좋은 라이브러리가 있을 때는 이를 적재적소에 활용할 필요도 있다. 컴퓨터 과학을 배우기 시작했고 기본적인 파이썬 언어를 다룰 줄 안다면 이 책을 적극 추천한다.



이창화





★ 옮긴이 소개 ★



이창화

경북대학교에서 기계공학 및 컴퓨터공학을 전공하고 있으며, 여러 방면의 공학 기술과학문에 관심이 많다. 대학 입학 전 프로그래밍에 관심을 갖기 시작한 후부터 C, 파이썬, 웹 언어, 오픈소스 임베디드 개발을 하게 됐다. 최근에는 머신 러닝과 딥러닝에 관련해 공부하고 있으며, 관련 도서를 찾고 읽는 데 푹 빠져 있다. 회사에 연연하지 않고 원하는 일과 연구에 몰입할 수 있는 라이프를 추구한다. 옮긴 책으로 『파이썬을 이용한 데이터 분석』(에이콘, 2018)이 있다.

등록된 서평이 없습니다.
 
전체평균(0)
회원평점   회원서평수 0
에이콘 출판사의 신간
『*OS Internals Vol.3: 애플 운영체제의 보안과 취약점』
조나단 레빈 저
45,000원
(10%↓+5%)
 
『OAuth 2.0 쿡북: Spring Security를 이용한 OAuth 애플리케이션 개발』
아돌포 엘로이 나시멘토 저
36,000원
(10%↓+5%)
 
GitHub를 활용한 다양한 도구 개발 : 개발 워크플로 최적화
크리스 도슨, 벤 스트라우브 저
27,000원
(10%↓+5%)
 
『파이썬으로 만드는 서버리스 애플리케이션: 24시간 사용 가능한 효율적인 웹 애플리케이션 개발』
잘렘 라지 로히트 저
22,500원
(10%↓+5%)
 
『이득우의 언리얼 C++ 게임 개발의 정석』
이득우 저
45,000원
(10%↓+5%)
 
이메일주소수집거부