많은 하위 프로세스를 실행하는 스크립트에서 작업하고 있습니다. 스크립트는이 스크립트를 모두 실행할 수 있어야하며 완료되면 루프를 체크 인하십시오.하위 프로세스를 기다리지 말고 나중에 returncode를 확인하십시오.
하나가 시작되지 않았 으면 끝날 때까지 기다렸다가 다음 시작을 기다립니다. 예를 들어
:
sp1 = subprocess.Popen(["sleep 60", shell=True)
sp2 = subprocess.Popen(["sleep 10", shell=True)
sp3 = subprocess.Popen(["sleep 80", shell=True)
sp1_done = False
sp2_done = False
sp3_done = False
while not sp1_done and not sp2_done and not sp3_done:
if sp1.returncode and not sp1_done:
print("sp1 done")
sp1_done = True
if sp2.returncode and not sp2_done:
print("sp2 done")
sp2_done = True
if sp3.returncode and not sp3_done:
print("sp3 done")
sp3_done = True
print("all done")
내가 하나가
sp1_data = sp1.communicate()[0]
와 함께 서브 프로세스의 에러 코드에 액세스 할 수 있는지 읽은 다음
그러나이 같은 returncode = sp1.returncode
와, 스크립트는 sp1
이 완료되기를 기다립니다.
여러 개의 하위 프로세스를 실행할 수 있지만 완료 될 때까지 기다리지 않고 (예 : 반환 코드를 확인하여) 완료되었는지 확인하십시오.
프로세스 당 하나의 스레드를 생성하고 거기에서'subprocess.Popen'을 실행할 수 있습니다. 좋은 amiga 그림 btw. –
Python 스레딩에 대한 경험이 없지만 감사합니다. 하하 ~ 예! 그것은 아름다움! – SaAtomic
진 프랑수아 파브르 (Jean-François Fabre)가 말한 것에 대해 자세히 설명하려면 내장 "스레드"라이브러리를 사용해보십시오 (실제로 파이썬 3에서는 "_thread"라고 생각합니다). thread.start_new를 사용하여 새 스레드를 시작합니다. 그것은 복잡한 개념을위한 매우 간단한 라이브러리입니다. 인터넷 검색 "파이썬 스레드 설명서"보십시오. – Douglas