귀찮아서가끔하는블로그

[python] multiprocessing (Pool) 본문

Python

[python] multiprocessing (Pool)

Y-unknow94 2022. 7. 8. 20:28
반응형

파이썬 멀티프로세싱


파이썬 멀티프로세싱

multiprocessing 은 threading 모듈과 유사한 API를 사용하여 프로세스 스포닝(spawning)을 지원하는 패키지입니다. multiprocessing 패키지는 지역과 원격 동시성을 모두 제공하며 스레드 대신 서브 프로세스를 사용하여 전역 인터프리터 록 을 효과적으로 피합니다. 이것 때문에, multiprocessing 모듈은 프로그래머가 주어진 기계에서 다중 프로세서를 최대한 활용할 수 있게 합니다. 유닉스와 윈도우에서 모두 실행됩니다.

출처 : https://docs.python.org/ko/3/library/multiprocessing.html

 

간단한 예제를 통해 multiprocessing의 장점을 살펴보자

 

1. multiprocessing을 사용하지 않은 경우

import multiprocessing
import time
from datetime import datetime

def sleepTest(name):
    #시작시간
    start_time = time.time()
    print("=====================================================")
    print(name + ": sleep IN")
    time.sleep(10)
    print("sleepTest elapsed: ", time.time() - start_time)  # seconds
    print("=====================================================")
    return "success"
    
process_list = ['p1', 'p2', 'p3', 'p4']

if __name__ == '__main__':
    print("=====================================================")
    for process in process_list:
        sleepTest(process)

#총 소요 시간
print("=====================================================")
print("elapsed time : ",time.time() - start_time)
print("=====================================================")

결과

총 40초의 시간이 소요 되었다.

2. multiprocessing을 사용한 경우

def sleepTest(name):
    #시작시간
    start_time = time.time()
    print("=====================================================")
    print(name + ": sleep IN")
    time.sleep(10)
    print("sleepTest elapsed: ", time.time() - start_time)  # seconds
    print("=====================================================")
    return "success"

process_list = ['p1', 'p2', 'p3', 'p4']

if __name__ == '__main__':
    #멀티 쓰레딩 Pool 사용
    pool = multiprocessing.Pool(processes=2) # 현재 시스템에서 사용 할 프로세스 개수
    pool.map(sleepTest, process_list)
    pool.close()
    pool.join()
    print("=====================================================")
    print("elapsed time : ",time.time() - start_time)
    print("=====================================================")

결과

총 22초의 시간이 소요되었다.

위와 같이 2개의 프로세스를 사용하여 소요시간을 절반으로 줄이는 효과를 볼 수 있다.

반응형
Comments