나는 여러 프로세스에 의해 병렬로 multiprocessing.Queue
을 처리하기위한 프로그램을 작성 중이다. 오케스트레이션 부분을 더 깊이 파고 들어갈수록 이해가 덜합니다.다중 프로세스에서 프로세스를 조율하는 방법?
내가 달성하고자하는 것은 여러 프로세스를 시작하고 모든 프로세스가 진행되기 전에 완료되었는지 확인하는 것입니다. 이것은 .join()
에 대한 일처럼 들립니다. 나는 다음과 같은 데모 스크립트를 테스트하여 결국
는 (리눅스에서 실행) : 내가 기대했던
import multiprocessing
import time
def myproc():
print("hello from {proc}".format(proc=multiprocessing.current_process()))
time.sleep(5)
allproc = []
for _ in range(3):
p = multiprocessing.Process(target=myproc)
allproc.append(p)
p.start()
print("all processes started")
for p in allproc:
print("joining {proc}".format(proc=p))
p.join()
print("the end")
이 기능은 immediatly은 "hello"라는 메시지를 인쇄 한 후 잠을 세 번 시작하는 것입니다. 이들 모두가 수면을 마치면 최종 메시지 ("끝")가 인쇄됩니다.
은 내가 실제로 얻을 것은 이것이다 :
hello from <Process(Process-1, started)>
hello from <Process(Process-2, started)>
all processes started
joining <Process(Process-1, started)>
hello from <Process(Process-3, started)>
joining <Process(Process-2, stopped)>
joining <Process(Process-3, stopped)>
the end
스크립트를 실행, 그것은 3 "안녕하세요"와 "결합"2 사이에 기다립니다.
예상 된 오케스트레이션을 달성 할 수 있도록 다중 처리 코드를 어떻게 설계해야합니까?
괜찮아 보입니다. 이것은 내가 생각하는 것입니다 : 주 스레드가 조인 줄에 도달하기 전에 세 번째 프로세스가 메시지를 인쇄 할 시간이 있습니다. 그때까지 세 번째 프로세스는 내용을 인쇄하고 기다립니다. 프로세스를 끝내면 주 스레드가 두 번째 프로세스에 참여할 수 있지만 둘은 이미 완료됩니다. 그런 다음 세 번째 프로세스로 이동하지만 그 사람도 수행됩니다 (두 경우 모두 "중지됨"상태에 유의하십시오). 그런 다음, 주요 프로세스는 전제를 떠납니다. –
나는 "전제"를 의미했다. –