반응형
함수들을 동시에 실행한다.
보통 다중 스레드나 멀티 프로세스가 머리속에 떠오를 것이다.
그럼 멀티스레드와 멀티프로세스의 차이는 무엇일까?
둘 다 동시에 무엇인가를 실행하는 것 아닌가?
설명들을 찾다보면 메모리가 어떻다느니, 시스템 자원이 어떻다느니 어려운 말들이 많다.
물론 좋은 설명들이지만 초보자가 이해하기는 어려운 감이 있다.
CPU에는 코어가 있다.
원래 CPU는 병렬처리가 안된다. 하지만 코어수를 늘림으로서 CPU의 역할을 분담하게 되고
이를 통해 병렬처리가 가능하게 된다. 이를 멀티스레드라 한다.
멀티프로세스는 하나의 CPU코어에서 다수의 프로세스를 짧게짧게 진행하는 것이다.
이를 통해 작업자는 여러개의 프로세스들이 동시에 진행되는 것 처럼 보이지만 사실은
짧게짧게 여러 프로세스들이 빠르게 진행되는 것이다.
그럼 본론으로 들어와 파이썬에서 멀티프로세스를 통해 여러 함수들을 실행시켜보자.
from multiprocessing import Process
import time
def print_a():
for i in range(500):
print("Process A!")
time.sleep(0.05)
def print_b():
for i in range(500):
print("Process B!")
time.sleep(0.07)
if __name__ == '__main__':
p_a = Process(target=print_a)
p_b = Process(target=print_b)
count = 0
while True:
count = count + 1
print("count: ", count)
if count == 100000000:
count = 0
if count == 50:
p_a.start()
if count == 70:
p_b.start()
time.sleep(0.1)
p_a.join()
p_b.join()
함수는 "Process A!"를 출력하는 함수와 "Process B!"를 출력하는 함수가 있으며
이들은 무한루프에서 실행된다.
그럼 프로세스는 while을 실행하는 프로세스와 print_a() 함수, print_b() 함수가 실행되게 된다.
실행 결과는 좌측의 사진과 같다.
count도 출력하고 A, B 함수들이 실행되어 각각의 문자들도 출력된다.
반응형