2015-01-31 1 views
0

다중 처리 모듈에 대해 배우고 있습니다. 이 예제는 python.org의 문서에서 찾았습니다.다중 처리 모듈에서 언제 join 메소드를 사용합니까?

from multiprocessing import Process 

def f(name): 
    print('hello', name) 

if __name__ == '__main__': 
    p = Process(target=f, args=('bob',)) 
    p.start() 
    p.join() 

여기서는 join을 사용하여 프로세스를 완료합니다.

from multiprocessing import Process, Lock 

def f(l, i): 
    l.acquire() 
    try: 
     print('hello world', i) 
    finally: 
     l.release() 

if __name__ == '__main__': 
    lock = Lock() 

    for num in range(10): 
     Process(target=f, args=(lock, num)).start() 

그러나이 경우에는 사용하지 않습니다. 나는 또한 이것을 읽었다.

데몬이 아닌 프로세스는 자동으로 조인된다.

두 번째 예제를 설명합니다. 그렇다면 처음에 참여를 사용해야하는 이유는 무엇입니까? 프로세스가 변수에 있기 때문에해야합니까?

답변

0

하위 프로세스가 완료 될 때까지 기다리려면 join()을 사용해야합니다. 주 프로그램이 근로자의 결과에 따라 무언가를하고 싶다면. 주 프로세스가 장기간 실행되고 하위 프로세스가 자주 생성되는 경우 join()으로도 호출해야합니다. 그렇지 않으면 참여하지 않은 사용자는 "좀비 프로세스"로 누적됩니다.

일반적으로 주 프로세스 실행 스레드가 하위 프로세스 대기가 아프지 않는 지점에 도달 할 때마다 그렇게하십시오. 파일을 닫는 것과 비슷합니다. 모든 파일은 종료시 암시 적으로 닫히기 때문에 꼭 필요한 것은 아니지만 리소스를 저장하기 때문에 좋은 방법입니다.

관련 문제