multiprocessing.pool
은 여러 개의 프로세스를 미리 만들어두고 반복적인 작업을 효율적으로 분배, 수거하기 위한 고수준 추상화 모듈.
"CPU 코어 여러 개를 안전하게 쓰기 위한 python 표준 병렬 처리 관리자이다.
즉, 프로세스 생성/종료를 직접 관리하지는 않고, "일을 던지면" 알아서 처리해주는 관리자 역할.
어떻게 작동하고 사용하는건지 간단한 예제를 통해 알아보자.
일반 for문 사용시
for x in data:
work(x)
- 한번에 하나씩 실행
- CPU 하나만 사용
Pool 사용
from multiprocessing import Pool
with Pool(4) as p:
p.map(work,data)
- CPU 4개 동시에 실행
- data에 있는 값들 하나하나를 work 라는 일 처리를 하는걸 4명의 worker에게 뿌려서 처리하게 함.

- Main Process: 작업 던져주기
- Worker Process: 실제로 연산 수행
- Pool: 분배 및 회수
조금 더 실질적인 사용법은 map 을 함께 쓰는 것이다.
이제 실제 연산을 넣은 예제를 살펴 보도록하자.
from multiprocessing import Pool
def square(x):
return x*x
if __name__=="__main__":
with Pool(4) as p:
result = p.map(square, [1,2,3,4,5])
print(result)
어떤 data [1,2,3,4,5] 에 대해서 각 원소를 제곱하는 연산을 수행하고자 한다.
이걸 4개의 worker에 뿌려서 데이터를 얻는 것이다.
Pool(nproc)
nproc = number of worker인 것이다
중요한 건 만약 내 cpu core 수가 4개라고 해서 worker를 무조건 4로 잡는건 최적의 선택이 아닐 수 있다.
이때 이제 map이라는 함수를 쓴걸 알 수 있는데
p.map(func, iterable)
- 첫번째 인자로는 반복적으로 연산해야하는 함수를, 두번째 인자로는 그 연산의 인풋값이 되는 데이터들을 넣어주면 된다
특징은
- 결과를 한 번에 반환하고,
- 순서를 보장해주고,
- 메모리를 조금 더 사용한다
map말고도 다른 함수들도 있다
조금씩 다른 특징을 가지고 있는데...
p.imap(func, iterable)
- 하나씩 결과를 반환
- 순서 보장
- 대용량 데이터에 좋다
p.imap_unordered(func, iterable)
- 순서 보장이 안됨
- 끝나는 대로 반환
- 처리 속도 최우선
상황에 따라 필요한 함수를 선택해서 사용해야한다.
'Machine learning' 카테고리의 다른 글
| [GPU] Multi Instance GPU(MIG)로 분산 학습(DDP) 설정 (0) | 2025.12.30 |
|---|