import multiprocessing as mp
# 프로세스에서 실행할 함수
def sub_process(name):
print("[sub] start")
print(name)
cp = mp.current_process()
print(f"[sub] pid: {cp.pid}")
print("[sub] end" )
# 메인 프로세스
if __name__ == "__main__": # 윈도우 운영체제에서만 실행됨
print('[main] start')
p = mp.Process(target=sub_process, args =('startcoding',))
p.start()
p.join()
cp = mp.current_process()
print(f"[main] pid: {cp.pid}")
print("[main] end")
이전에서 배운 것과 마찬가지로 join을 부여하면 메인 프로세스는 서브 프로세스가 모두 종료할 때까지 기다리게된다.
서브 프로세스를 클래스의 형태로 정의하여 실행할 수 있다.
from multiprocessing import Process
import time
class Subprocess(Process):
def __init__(self, name):
Process.__init__(self)
self.name = name
def run(self):
print(f"[sub] {self.name} start")
time.sleep(5)
print(f"[sub] {self.name} end")
if __name__ =="__main__":
print("[main] start")
p = Subprocess(name ="startcoding")
p.start()
p.join()
print("[main] end")
※ is_alive() 프로세스가 살아있는지 검사해주주는 메서드로 boolean 값을 출력한다.
※ terminate() 프로세스를 강제 종료한다.
if __name__ =="__main__":
print("[main] start")
p = Subprocess(name ="startcoding")
p.start()
time.sleep(1)
#프로세스가 살아있는지 검사하고 True 값일 경우 강제 종료 해버린다.
if p.is_alive:
p.terminate()
print("[main] end")
서브 프로세스가 실행되기 전에 종료된 모습이다.