본문 바로가기

프로그램_기본이론

프로세스 생성(실습)(2)

06번 예제를 만들어서 실행 

05번 예제를 복사해서 우선 그대로 가져오겠다.

 

func 라는 작업이 있다 이것은 단지 하나의 작업이다 

이 작업은 다른 프로세스에게 똑같은 일을 또 시킬 수 있는 그런 작업이다.

여기서 child 를 여러개 만들어 보겠다.

 

child1 = Process(target=func)
child1.start()
child2 = Process(target=func)
child2.start()
child = Process(target=func)
child.start()

넘버링은 다르게 해서 각 똑같은 것들을 만들어 보았다.

똑같은 작업을 맡아서 처리하는 3개의 하위 프로세스를 각 각 만든 게 된다.

 

print 부분 05.py 를 06.py로 수정 후 실행해보겠다.

 

06.py 출력

 

출력 결과 1480 이 06.py 의 ID로, 메인 프로세스 아이디인 것이다.

그리고 메인 프로세스로부터 뻗어 나가서 생긴 친구들이 1482, 1483, 1484 인 것이다.

이것들이 각 child1의 target, child2의 target, , child2의 target 이 된다.

import time

여기서 좀 더 자세히 보고 싶다면 time.sleep 을 이용하여 딜레이를 넣어보자 그렇다면 차이를 볼 수 있다.

time의 sleep 함수 같은 경우는 초 단위로 딜레이를 만드는 함수이다 

time.sleep(1)

 

06.py 재출력

 

다시 실행해보면 랜덤값으로 다시 ID 가 출력된 내역과,

1초에 한 번 딜레이되어 출력이 차례대로 되는 것을 확인해 볼 수 있다.

child1의 target = 1617,

child2의 target = 1620, 

child2의 target = 1621

순서대로 출력

 

마지막으로 예제를 추가로 만들어 서로 다른 작업을 하는 프로세스를 만들어보겠다.

임포트 부분은 06.py와 동일하게 가져와준다.

from multiprocessing import Process
import os
import time

그리고 이번에는 함수를 각 각 다르게 만들어 주겠다.

def coke() :
print('콜라 프로세스 아이디 :', os.getpid())
print('부모 프로세스 아이디 :', os.getppid())

def juice() :
print('주스 프로세스 아이디 :', os.getpid())
print('부모 프로세스 아이디 :', os.getppid())

def cider() :
print('사이다 프로세스 아이디 :', os.getpid())
print('부모 프로세스 아이디 :', os.getppid())

이렇게 되면 작업이 다 다르게 되는데, 이 다른 작업들에게 프로세스 생성을 하나 씩 맡겨 보겠다.

06.py에서 진행했던 if 부분을 복사해서 가져온 후 이번에는 06.py를 07.py로 변경해준다.

그리고 func 부분을 각 coke, cider, juice 로 변경하고 실행해보겠다.

 

if __name__ == '__main__':
print('07.py 프로세스 아이디 :', os.getpid())
child1 = Process(target=coke)
child1.start()
time.sleep(1)
child2 = Process(target=cider)
child2.start()
time.sleep(1)
child = Process(target=juice)
child.start()
time.sleep(1)
 

 

07.py 출력

이번에도 1초 씩 딜레이 되어 각 프로세스 아이디가 출력되는 것을 확인할 수 있다.

 

이렇게 멀티 프로세싱을 연습을 해보았다.

파이썬으로는 인터페이스가 매우 간단한데 C, JAVA 로도 이런 작업을 할 수 있다. 

 

'프로그램_기본이론' 카테고리의 다른 글

프로세스 생성(실습)  (0) 2024.04.05
프로세스 생성  (0) 2024.04.05
프로세스_컨텍스트 스위칭  (1) 2024.04.05
프로세스 상태(실습)  (0) 2024.04.05
프로세스 상태  (0) 2024.04.05