본문 바로가기
Machine learning

[CPU 병렬 처리] multiprocessing.Pool 사용법 알아보기

by 갈비맛나 2026. 1. 5.

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