multiprocessing은 「여러 프로세스를 띄워 진정한 병렬 실행」을 가능케 합니다.
GIL은 프로세스 단위로 적용되므로, CPU 바운드 작업도 코어 수만큼 빨라집니다.
기본 사용.
from multiprocessing import Process.
def worker(n): print(f"process {n}").
p = Process(target=worker, args=(1,)).
p.start(); p.join().
threading과 거의 같은 인터페이스.
Pool로 일괄.
with Pool(4) as p: results = p.map(square, range(100)) — 4개 프로세스가 100개 작업 분담 처리.
4코어 머신에서 거의 4배 빨라짐.
CPU 무거운 작업의 표준 패턴.
프로세스 간 통신.
메모리 공유 안 됨.
multiprocessing.Queue, Pipe, shared_memory(파이썬 3.8+)로 데이터 전달.
pickle로 직렬화 → 전송 → 역직렬화이므로 큰 객체는 오버헤드 큼.
함정 — Windows·macOS에서 if __name__ == "__main__":.
자식 프로세스가 부모 스크립트를 다시 import하므로 가드 없으면 무한 재귀.
이걸 빠뜨리면 무한 프로세스 생성으로 시스템 마비 가능.
한 줄 요약
multiprocessing은 여러 프로세스로 GIL 우회 진정 병렬.
CPU 바운드 작업이 코어 수만큼 빨라짐.
Pool.map이 표준, __name__ == "__main__" 가드 필수.
더 알아볼 것
- concurrent.futures.ProcessPoolExecutor
- shared_memory — 큰 데이터 공유
- joblib — 더 쉬운 병렬