Подтвердить что ты не робот

Подождать до тех пор, пока все подпроцессы не закончатся?

У меня есть основной процесс, который создает два или более подпроцесса, я хочу, чтобы основной процесс ожидал, пока все подпроцессы не закончат свои операции и не выйдут?

 # main_script.py

 p1 = subprocess.Popen(['python script1.py']) 
 p2 = subprocess.Popen(['python script2.py'])
 ... 
 #wait main process until both p1, p2 finish
 ...
4b9b3361

Ответ 1

Объект

A Popen имеет метод .wait(), который точно определен для этого: дождаться завершения данного подпроцесса (и, кроме того, для перенастройки своего статуса выхода).

Если вы используете этот метод, вы предотвратите, чтобы процесс-зомби лежали слишком долго.

(В качестве альтернативы вы можете использовать subprocess.call() или subprocess.check_call() для вызова и ожидания.Если вам не нужно IO с процессом, этого может быть достаточно. Но, вероятно, это не вариант, потому что ваш, если два подпроцесса, похоже, должны работать параллельно, что они не будет с (check_) call().)

Если у вас есть несколько подпроцессов для ожидания, вы можете сделать

exit_codes = [p.wait() for p in p1, p2]

который возвращается, как только все подпроцессы завершены. Затем у вас есть список кодов возврата, которые вы, возможно, можете оценить.

Ответ 2

subprocess.call

Автоматически ждет, вы также можете использовать:

p1.wait()