동시 실행

동시 실행 (Concurrent Execution)

이 장에서 설명하는 모듈들은 코드의 동시 실행을 지원해요.

적절한 도구 선택은 실행할 작업의 성격(CPU 바운드 vs IO 바운드)과 선호하는 개발 스타일(이벤트 주도 협력 멀티태스킹 vs 선점형 멀티태스킹)에 따라 달라져요.

이 장은 파이썬 표준 라이브러리에서 동시성·병렬성 관련 모듈을 모아 둔 목차 페이지예요.

각 모듈이 어떤 상황에 적합한지 하나씩 살펴볼게요.

출처: Python documentation

본문

threading — 스레드 기반 병렬성

threading 모듈은 파이썬에서 스레드를 다루는 고수준 인터페이스예요.

소개, GIL과 성능 고려사항, 레퍼런스를 다루고, 스레드-로컬 데이터, Thread 객체를 제공해요.

Lock/RLock/Condition/Semaphore/Event/Timer/Barrier 객체를 제공해요.

with 문에서 락·조건·세마포어를 사용하는 방법도 설명해요.

IO 바운드 작업을 동시에 처리할 때 주로 유용해요.

multiprocessing — 프로세스 기반 병렬성

multiprocessing 모듈은 프로세스를 이용한 병렬성을 제공해요.

GIL의 제약을 피해 CPU 바운드 작업을 병렬화하는 데 유용해요.

소개, Process 클래스, 컨텍스트와 시작 방법, 프로세스 간 객체 교환, 동기화, 상태 공유, 워커 풀을 다뤄요.

Connection 객체, 동기화 프리미티브, 공유 ctypes 객체, Managers, 프록시 객체, 정리, 프로세스 풀을 다뤄요.

리스너와 클라이언트, 주소 형식, 인증 키, 로깅, multiprocessing.dummy 모듈, 프로그래밍 지침, 예제도 다뤄요.

multiprocessing.shared_memory — 프로세스 간 직접 접근 공유 메모리

multiprocessing.shared_memory 모듈은 프로세스 간 직접 접근할 수 있는 공유 메모리 블록을 제공해요.

공유 메모리를 만들고 접근해 프로세스들이 데이터를 효율적으로 주고받을 수 있게 해 줘요.

concurrent 패키지

concurrent 패키지는 두 모듈을 담아요.

concurrent.futures — 병렬 태스크 실행. Executor 객체, ThreadPoolExecutor, InterpreterPoolExecutor, ProcessPoolExecutor, Future 객체, 모듈 함수, 예외 클래스를 제공해요.

concurrent.interpreters — 같은 프로세스 안의 여러 인터프리터. 인터프리터와 분리, 인터프리터에서 실행, 인터프리터 간 통신, 객체 "공유"를 다뤄요.

subprocess — 서브프로세스 관리

subprocess 모듈은 새 프로세스를 만들고 그 입출력과 종료 상태를 다루는 기능을 제공해요.

모듈 사용법, 자주 쓰는 인자, Popen 생성자, 예외, 보안 고려사항, Popen 객체를 다뤄요.

Windows Popen 헬퍼/상수, 이전 고수준 API, 오래된 함수 교체(os.system(), os.spawn, os.popen())도 다뤄요.

시간 초과 동작, Windows에서 인자 시퀀스를 문자열로 변환, posix_spawn() 비활성화에 대한 참고도 포함해요.

sched — 이벤트 스케줄러

sched 모듈은 특정 시간에 이벤트를 실행하는 범용 이벤트 스케줄러를 제공해요.

Scheduler 객체와 enter(), run() 같은 메서드로 작업을 예약해요.

queue — 동기화된 큐 클래스

queue 모듈은 스레드 안전한 FIFO/LIFO/우선순위 큐를 제공해요.

Queue 객체, 태스크 완료 대기(task_done()/join()), 큐 종료, SimpleQueue 객체를 다뤄요.

생산자-소비자 패턴에서 유용해요.

contextvars — 컨텍스트 변수

contextvars 모듈은 컨텍스트-로컬 상태를 관리하기 위한 API를 제공해요.

ContextVar 클래스, 수동 컨텍스트 관리(copy_context, Context), asyncio 지원을 다뤄요.

비동기 코드에서 상태가 새는 것(leak)을 막는 데 유용해요.

위 서비스 중 일부의 지원 모듈로 _thread(저수준 스레딩 API)가 있어요.

더 알아보기 (Learn more)