Daily Develope

[Python] Multi processing 멀티 프로세싱 본문

Develope/Python

[Python] Multi processing 멀티 프로세싱

noggame 2023. 2. 15. 20:00

샘플코드 - Multiprocessing Pool

: 현재 환경의 전체 프로세스를 사용해 0~499 까지의 제곱을 (병렬)계산

import multiprocessing

def mul(x):
   return x*x

if __name__ == '__main__':
   availableProcess = multiprocessing.cpu_count()          # CPU 전체개수 조회
   processPool = multiprocessing.Pool(availableProcess)    # 사용할 CPU 개수 설정, 논리(logical) CPU당 하나의 worker process를 가진다
   processPool.map(mul, range(500))                        # 0~499 까지 숫자를 인자값으로 mul 함수 호출을 각 코어마다 수행

 

샘플코드 - ProcessPoolExecutor

: 현재 환경의 전체 프로세스를 사용해 0~499 까지의 제곱을 (병렬)계산

import multiprocessing
from concurrent.futures import ProcessPoolExecutor

def mul(x):
   return x*x

if __name__ == '__main__':
   availableProcess = multiprocessing.cpu_count()          # CPU 전체개수 조회
   processPool = ProcessPoolExecutor(availableProcess)     # 사용할 CPU 개수 설정, 논리(logical) CPU당 하나의 worker 
   processPool.map(mul, range(500))

 

샘플코드 - Process

: 동일한 함수를 반복호출 하려는 경우 사용 (앞의 예시들은 동일한 함수를 여러 프로세스가 나누어 처리했다면, 아래 방법은 각 함수마다 별도 프로세서를 가지고 동작한다.)

from multiprocessing import Process

def mul(x):
   return x*x

if __name__ == "__main__":

    mul_list = range(5)
    procs = [Process(target=mul, args=(mul_item,)) for mul_item in mul_list]

    # Start procs
    for proc in procs:
        proc.start()

    # Join procs
    for idx, proc in enumerate(procs):
        proc.join()
        print(f"--- proc_{idx} done. ---")

 

 

Multiprocessing Pool vs ProcessPoolExecutor 차이

  • 공통점 : Multi Processing 지원 (child worker processes 생성 및 사용), 비동기 처리 지원
  • 차이점 : Task의 선택/시작/대기와 같은 작업 수행 가능여부 (ProcessPoolExecutor에서는 Task 상태에 따른 처리가 Multiprocessing Pool에 비해서 보다 자유로움)
Comments