Python, Multiprocessing 모듈 이해하기

SeunghoChoe·2021년 3월 2일
0
post-custom-banner

multiprocessing 문서의 목차

  1. 소개
    1. Process 클래스
    2. 컨텍스트 및 시작 방법
    3. 프로세스 간 객체 교환
    4. 프로세스 간 동기화
    5. 프로세스 간 상태 공유
    6. 작업자 풀 사용
  2. 레퍼런스
    1. Process와 예외
    2. 파이프와 큐
    3. 잡동사니
    4. Connection 객체
    5. 동기화 프리미티브
    6. 공유 ctypes 객체
      • multiprocessing.sharedctypes 모듈
    7. 관리자
      • 사용자 정의 관리자
      • 원격 관리자 사용하기
    8. 프락시 객체
      • 정리
    9. 프로세스 풀
    10. 리스너와 클라이언트
      • 주소 형식
    11. 인증 키
    12. 로깅
    13. multiprocessing.dummy 모듈
  3. 프로그래밍 지침
    1. 모든 시작 방법
    2. spawn 과 forkserver 시작 방법
  4. 예제

개념 이해하기(from 공룡책)

풀(Pool)

사실상 책에서는 Thread를 대상으로 Pool을 설명한다. Process를 Pool에 담아서 사용하는 경우가 흔하지 않은 것 같다. 그래서 뒤에 따르는 설명들은 Thread를 기준으로 작성하였습니다.

어쨋든, 병렬 처리 프로그램을 구현하기 위해서는 대표적으로 동기화(Synchronization), 교착 상태(Daedlock)와 같은 어려운 주제를 다루어야 하며, 이 뿐만 아니라 테스크를 식별하고, 쓰레드 간의 균형을 맞추는 등 여러 과제 또한 처리해야 한다. Pool은 이러한 어려움들을 처리하기 위한 여러 접근법 중 하나이다. (책에서는 Thread Pools를 비롯한 OpemMP, Grand Central Dispatch를 나열하고 있다.)

Pool의 기본 개념은 미리 생성된 일정 수의 Thread가 테스크를 기다리는 공간입니다. Thread들은 Process가 시작되는 시점에 생성되어 Pool에 담겨집니다. (웹 서버를 예로 들어)서버가 요청(Request)을 받으면 사용가능한 Thread를 꺼내와서 해당 Thread에 요청을 할당하고, 작업이 끝나면 다시 Pool에 되돌려 놓습니다. 이용가능한 Thread가 없을 경우에는 다른 Thread의 작업이 끝나 Pool에 돌아올 때까지 기다립니다.

이러한 Pool을 이용하면 다음 3가지의 이점이 있습니다.

  1. 요청이 올때마다 Thread를 생성하는 것보다 시간 비용을 줄일 수 있습니다.
  2. Thread의 총량을 관리할 수 있습니다.
  3. 테스크의 생성과 실행을 분리할 수 있습니다.

프로세스(Process)

동기화(Synchronization)

(프로세스 간) 공유메모리(Shared Memory)

profile
I'm a software engineer
post-custom-banner

0개의 댓글