본문 바로가기
Programming/python

multi process 구현하기

by 유주원 2021. 11. 19.

python을 이용해서 multi process를 구현해 보기로 한다.

코드는 엄청 간단하다.

 

from multiprocessing import Process
 
def start_node(index):
    print(index)
 
 
if __name__ == "__main__":
    num = 1
    proc = Process(target=start_node, args=(num,))
    proc.start()
    proc.join()

 

위의 예제 코드를 활용해서 기존 코드를 multi process로 전환하였지만 아래와 같은 문제가 발생했다.

해당 프로세스를 종료시켰으나, fork시킨 process가 종료되지 않고 좀비 프로세스로 남아있는 문제였다.

 

이를 방지하기 위해 Process 생성 시 daemon = True argument를 추가해 준다.

 

proc = Process(target=start_node, args=(num,), daemon=True)

 

daemon 속성은 서브 프로세스를 데몬 프로세스로 지정해주는 역할을 한다. 데몬 프로세스로 지정이 되면 메인 프로세스 종료시 즉시 종료가 되는 프로세스가 된다. 만약 데몬 프로세스로 지정이 안되어 있다면, 메인 프로세스가 종료하더라고 서브 프로세스는 죽지 않고 계속 남아 있게 된다.

 

daemon 으로 설정을 지정해줬으나 아래와 같은 에러가 발생했다.

 

daemonic processes are not allowed to have children

 

데몬 프로세스를 지정하게 되면 해당 데몬 프로세스 안에서 multi process를 쓰는 package 등이 있을 시에 위와 같은 에러가 발생한다.

해당하는 multi process package를 변경해 줬더니 에러 메시지가 사라졌다.