( PMOTW 기사에서 ) Python Multiprocessing 에 대해 배우고이join()
메서드가 정확히 무엇을하고 있는지에 대한 설명을 좋아할 것 입니다.
2008 년의 이전 튜토리얼 에서는 p.join()
아래 코드 의 호출 없이 "하위 프로세스가 유휴 상태로 유지되고 종료되지 않으므로 수동으로 죽여야하는 좀비가됩니다"라고 설명합니다.
from multiprocessing import Process
def say_hello(name='world'):
print "Hello, %s" % name
p = Process(target=say_hello)
p.start()
p.join()
테스트 PID
할뿐만 아니라 의 출력을 추가 time.sleep
했으며 내가 알 수있는 한 프로세스는 자체적으로 종료됩니다.
from multiprocessing import Process
import sys
import time
def say_hello(name='world'):
print "Hello, %s" % name
print 'Starting:', p.name, p.pid
sys.stdout.flush()
print 'Exiting :', p.name, p.pid
sys.stdout.flush()
time.sleep(20)
p = Process(target=say_hello)
p.start()
# no p.join()
20 초 이내 :
936 ttys000 0:00.05 /Library/Frameworks/Python.framework/Versions/2.7/Reso
938 ttys000 0:00.00 /Library/Frameworks/Python.framework/Versions/2.7/Reso
947 ttys001 0:00.13 -bash
20 초 후 :
947 ttys001 0:00.13 -bash
동작은 p.join()
파일 끝에 다시 추가 된 것과 동일 합니다. 금주의 Python 모듈은 모듈에 대한 매우 읽기 쉬운 설명을 제공합니다 . "프로세스가 작업을 완료하고 종료 할 때까지 기다리려면 join () 메서드를 사용하십시오."그러나 적어도 OS X는 어쨌든 그렇게하는 것 같습니다.
방법의 이름에 대해서도 궁금합니다. .join()
메서드 가 여기에 연결되어 있습니까? 프로세스를 끝과 연결하고 있습니까? 아니면 파이썬의 네이티브 .join()
메서드 와 이름 만 공유 합니까?
CPU, Memory resources
는 부모 프로세스에서 분리되고 join
자식 프로세스가 완료된 후 다시 돌아가는 것입니까?