Logo
내 게시판 만들기
파이썬

multiprocessing — 진짜 병렬 처리

부엉이 | 2026.04.27 06:24:49
조회 25 | 추천 0

multiprocessing은 「여러 개의 별도 프로세스를 동시에 돌려 진짜 CPU 병렬 처리를 하는」 표준 라이브러리입니다.

threading의 GIL 한계를 우회해 CPU 집약 작업을 여러 코어에서 동시에 처리할 수 있습니다.



기본 사용.

from multiprocessing import Process.

def heavy_calc(n): return sum(i*i for i in range(n)).

p = Process(target=heavy_calc, args=(1000000,)); p.start(); p.join().

API는 threading과 비슷하지만 별도 프로세스이므로 GIL 영향이 없습니다.



Pool로 더 편하게.

from multiprocessing import Pool.

with Pool(4) as pool: results = pool.map(heavy_calc, [1000000]*10).

4개 워커 프로세스가 10개 작업을 나눠 처리.

CPU가 4코어라면 거의 4배 빠른 결과.



프로세스 vs 스레드.

프로세스는 「완전 독립」 — 메모리 공유 없음, 통신은 큐·파이프로.

무겁지만 안전.

스레드는 「메모리 공유」 — 가볍지만 동기화 문제 있음.

「I/O 대기 → threading, CPU 계산 → multiprocessing」이 일반 원칙입니다.



함정.

프로세스 시작 비용이 큽니다(스레드의 100~1000배).

작은 작업을 많이 처리하면 「병렬화 비용」이 「병렬화 이득」을 넘을 수 있어 오히려 느려집니다.

큰 작업 단위로 나누는 게 효율적이고, 데이터 전달 비용(pickle 직렬화)도 고려해야 합니다.




한 줄 요약


multiprocessing은 별도 프로세스로 진짜 CPU 병렬 처리를 합니다.

GIL을 우회해 CPU 집약 작업에 강하며, Pool로 편하게 워커를 관리할 수 있습니다.

프로세스 시작 비용에 주의.




더 알아볼 것


- concurrent.futures.ProcessPoolExecutor

- 공유 메모리(SharedMemory) — 3.8+

- 대안 — Joblib·Dask

공유하기
목록보기
번호 제목 글쓴이 작성일 조회 좋아요
101 별님이 26/04/27 12 0
100 부엉이 26/04/27 10 0
99 다람쥐 26/04/27 13 0
98 야옹이 26/04/27 14 0
97 구름이 26/04/27 17 0
96 곰돌이 26/04/27 14 0
95 부엉이 26/04/27 8 0
94 햇살이 26/04/27 8 0
93 멍뭉이 26/04/27 8 0
92 별님이 26/04/27 11 0
91 다람쥐 26/04/27 9 0
90 부엉이 26/04/27 25 0
89 구름이 26/04/27 7 0
88 토순이 26/04/27 12 0
87 토순이 26/04/27 9 0
86 햇살이 26/04/27 9 0
85 구름이 26/04/27 11 0
84 햇살이 26/04/27 13 0
83 야옹이 26/04/27 16 0
82 너구리 26/04/27 11 0
81 햇살이 26/04/27 8 0
80 토순이 26/04/27 25 0
79 다람쥐 26/04/27 11 0
78 야옹이 26/04/27 9 0
77 부엉이 26/04/27 9 0
76 별님이 26/04/27 9 0
75 햇살이 26/04/27 14 0
74 곰돌이 26/04/27 9 0
73 구름이 26/04/27 11 0
72 햇살이 26/04/27 6 0
신고하기

신고 사유를 선택해 주세요.