반응형
멀티 프로세스(Multi-Process)를 사용하고자 한다.
멀티 프로세스 사용하기
1. 멀티 프로세스
아래의 함수를 4번 실행한다고 가정한다. 이 함수는 1초간 잠들었다가 깨어나는 동작을 수행한다.
def do_something():
print('1초간 잠을 잡니다...')
time.sleep(1)
print('잠에서 깨었습니다...')
이 함수를 4번 실행해보자. 이 때, 실행 완료 시간은 대략 4초가 걸릴 것이다.
import time
def do_something():
print('1초간 잠을 잡니다...')
time.sleep(1)
print('잠에서 깨었습니다...')
if __name__ == '__main__':
start = time.perf_counter()
for _ in range(4):
do_something()
finish = time.perf_counter()
print(f'{round(finish-start,2)}초 만에 작업이 완료되었습니다.')
[실행결과] 예상했던 대로 약 4초가 소요되었다.
2. multi-processing 모듈 사용하기
앞에 살펴보았던 코드를 multiprocessing 모듈을 이용하여 처리해보자.
import time
import multiprocessing
def do_something():
print('1초간 잠을 잡니다...')
time.sleep(1)
print('잠에서 깨었습니다...')
if __name__ == '__main__':
start = time.perf_counter()
processes = []
for _ in range(4):
p = multiprocessing.Process(target=do_something) ## 각 프로세스에 작업을 등록
p.start()
processes.append(p)
for process in processes:
process.join()
finish = time.perf_counter()
print(f'{round(finish-start,2)}초 만에 작업이 완료되었습니다.')
프로세스를 담아줄 리스트를 초기화해주고, 루프를 돌면서 프로세스를 하나씩 만들어준다. 이 때 target 인자를 통하여 이 프로세스가 해야할 작업(함수)을 등록해준다. 등록해주고 난 뒤 실행할 수 있도록 start 메서드를 호출한다.
[실행결과] 실행 시간이 1.1초 걸렸다. 약 4 배정도 빨라졌다.
반응형
'Python' 카테고리의 다른 글
[Python] 2D 이미지 FFT 적용하기 (2) | 2022.10.05 |
---|---|
[Python] 히스토그램 변환 with OpenCV (0) | 2022.06.23 |
멀티 프로세스(Multi-Process) 응용하기 with Python (0) | 2022.05.19 |
멀티 스레드(Multi-Thread ) 응용하기 with Python (0) | 2022.05.19 |
멀티 스레드(Multi-Thread ) 시작하기 with Python (0) | 2022.05.19 |
댓글