Top

파이썬 병렬 프로그래밍 [threading, multiprocessing, PP, Celery, asyncio 모듈 이해와 활용]

  • 원서명Parallel Programming with Python (ISBN 9781783288397)
  • 지은이얀 팔라흐(Jan Palach)
  • 옮긴이이문호
  • ISBN : 9788960779204
  • 14,000원
  • 2016년 11월 04일 펴냄
  • 페이퍼백 | 148쪽 | 188*235mm
  • 시리즈 : acorn+PACKT

책 소개

소스 파일은 아래 깃허브 페이지에서 내려 받으실 수 있습니다.
(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 모듈을 사용하는 방법과 비동기 프로그래밍에 관한 방법을 설명한다.

저자/역자 소개

지은이의 말

몇 달 전 팩트출판사 전문 기획자에게 파이썬을 이용한 병렬 프로그래밍에 관한 책을 써달라는 연락을 받았다. 기존에는 책을 쓰겠다는 생각은 전혀 없었으며, 갑작스러웠기에 어떻게 해야만 할지, 책을 구상하는 것이 얼마나 복잡할 것인지, 작업 일정을 어떻게 맞춰야 할지 막막하기만 했다. 하지만 며칠 동안 고민하다가 결국 미션을 받아들였는데, 개인적으로 많이 배울 수 있고, 전 세계 독자에게 파이썬 지식을 전파할 수 있는 완벽한 기회가 될 것이라고 생각했고 내 인생의 여정에 가치가 있는 유산으로 남았으면 하는 바람이 있었기 때문이다.
이번 작업의 첫 단계는 주제 결정이었다. 모든 독자를 쉽게 만족시킬 수 없겠지만, 이론과 실무를 조합한 파이썬 병렬 프로그래밍을 소개한 이 작은 책에는 제안했던 주제가 골고루 안배됐다고 믿는다. 이번 작업은 모험이었다. 첫 장에서 정의한 예제의 문제를 풀 수 있는 방법을 보여준 후, 책의 분량을 감안해 제공한 도구를 사용해 해결하는 새로운 포맷을 사용했다. 독자가 파이썬이 제공하는 여러 가지 모듈을 분석하고 질문하게 해주는 매우 흥미로운 포맷이라고 생각한다.
모든 장에 약간의 이론을 넣었는데, 사례를 따라가기 위한 몇 가지 기본 지식을 제공하도록 맥락을 구성했다. 이 책이 파이썬 병렬 프로그래밍 세계 속으로 모험할 때 도움이 되기를 진심으로 바란다. 그만큼 완벽하게 집필하려고 노력했다.

지은이 소개

얀 팔라흐(Jan Palach)

경력 13년차의 소프트웨어 개발자다. C++, 자바, 파이썬 기술을 사용해 민간 회사를 위해 과학 시각화와 백엔드단을 개발해왔다. 브라질의 리우데자네이루(Rio de Janeiro)에 있는 에스따씨오 데 사(Estacio de Sa) 대학교에서 정보 시스템 학위, 파라나 주 연방 기술(Parana State Federal Technological) 대학교에서 석사 학위를 받았다. 현재는 C++ 시스템을 구현하는 통신 부문에 속한 민간 기업에서 수석 시스템 분석가로 근무하고 있다. 기술적으로 열광하는 파이썬과 얼랭으로 재미있게 실험하기를 좋아한다. 자연스러운 호기심으로 새로운 기술에 도전해 공부하고, 낯선 사람을 만나고, 다른 문화에 대해 배우기를 좋아한다.

옮긴이의 말

파이썬은 C/C+에 비해 상대적으로 쉽고 빠르게 개발할 수 있는 좋은 프로그래밍 언어다. 그 비결은 무엇일까? 바로 모듈 형태로 제공되는 수많은 기능을 찾아 쓰기만 하면 되는 라이브러리가 풍부해 강력하면서도 효율적으로 사용할 수 있다는 장점 때문이다. 하지만 파이썬에 입문한 독자에게는 병렬 프로그래밍이 더 막막할 수 있다. 그럴 수밖에 없는 이유는 병렬화와 관련된 이해가 필요한 데다가 파이썬의 병렬 프로그래밍 관련 많은 모듈을 어떤 경우에 쓰고 어떻게 활용하는지 쉽게 감이 오지 않기 때문이다. API 문서와 예제 코드를 참고하면 되겠지만, 수많은 시행착오를 겪지 않는 이상 병렬 프로그램에 대한 자신감에 한계가 있을 것이다. 경험이 풍부한 개발자도 예외일 수 없다. 저자는 이런 현실을 고려해 모든 파이썬 개발자가 병렬 프로그래밍에 대한 이해와 자신감을 갖추게 하되, 어떤 모듈을 사용해야 하는지에 대한 지침을 제공하고자 이 책을 집필했다.
이 책은 효율적인 병렬 프로그래밍을 위한 내장 모듈과 외장 모듈 중에서 스레드 기반 threading 모듈과 프로세스 기반 multiprocessing 모듈, 병렬 태스크를 수행하는 패러럴 파이썬과 분산 처리를 위한 셀러리, 비동기 I/O를 지원하는 asyncio 모듈을 선정한 후, 처음부터 병렬 프로그래밍 모델 개념, 병렬화 문제점을 확인한 후, 병렬 알고리즘 설계에 따른 모듈 선정 방법을 알려준다. 그런 다음에 실생활에서 접할 수 있는 사례인 피보나치 수열 구하기와 웹 수집기를 구현하는 과정에서 각 병렬 모듈에 대한 약간의 이론과 사용법을 제시한다.
이 책을 마칠 때쯤이면 자신만의 병렬 프로그램을 구현할 때 적재적시에 해당 모듈을 선택할 수 있는 자신감이 생길 것이다. 이 책이 독자에게 많은 도움을 주는 안내서로 자리매김하길 바란다. 덧붙여 이 책의 내용을 바탕으로 파이썬을 이용한 병렬 프로그래밍을 전문적으로 다루되 예제가 풍부한 책을 원한다면 팩트출판사의 GPU 프로그래밍 방법까지 설명한 『Python Parallel Programming Cookbook』(2015)을 읽어보기를 권한다.

옮긴이 소개

이문호

관심 분야는 정보 검색이며, 매일 4시간 이상 걸리는 출퇴근 시간에 다방면의 원서를 읽는 쏠쏠한 즐거움에 빠져 사는 아날로그 세대다. 영상처리를 전공으로 석사를 마쳤고, 현재 문헌정보학 박사 과정에 있으며, 컴퓨터 비전 기반 지능형 솔루션 개발에 전념하고 있다. 오픈소스 자바 검색 엔진인 루씬(Lucene)에 관한 첫 국내서인 『루씬 인 액션』(에이콘출판사, 2005)을 공역했으며, 오픈소스 영상처리 라이브러리를 다룬 오픈소스 라이브러리 실무 시리즈 도서를 펴낸 저자로도 잘 알려져 있다. 『MATLAB을 활용한 실용 디지털 영상처리』(홍릉과학출판사, 2005), 『오픈소스 OpenCV를 이용한 컴퓨터 비전 실무 프로그래밍』(홍릉과학출판사, 2007) 등 7권의 책을 저술했으며, 번역서로는 에이콘출판사에서 출간한 『OpenCV 2 Computer Vision Application Programming Cookbook 한국어판』(2012), 『EmguCV와 테서렉트 OCR로 하는 컴퓨터 비전 프로그래밍』(2014), 『OpenCV 프로그래밍』(2015), 『(개정판) OpenCV를 활용한 컴퓨터 비전 프로그래밍』(2015), 『matplotlib을 이용한 데이터 시각화 프로그래밍』(2015), 『OpenCV 컴퓨터 비전 프로젝트』(2016), 『C# 멀티스레드 프로그래밍』(2016), 『안드로이드 비동기 프로그래밍』(2016), 『매트랩 영상처리 프로그래밍』(2016)이 있다.

목차

목차
  • 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와 함께 사용하기
    • 요약

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안