python - guia - qgis manual
esperar proceso hasta que todos los subprocesos terminen? (2)
Esta pregunta ya tiene una respuesta aquí:
Tengo un proceso principal que crea dos o más subprocesos. ¿Quiero que el proceso principal espere hasta que todos los subprocesos terminen sus operaciones y salgan?
# main_script.py
p1 = subprocess.Popen([''python script1.py''])
p2 = subprocess.Popen([''python script2.py''])
...
#wait main process until both p1, p2 finish
...
Un objeto Popen
tiene un método .wait()
definido exactamente para esto: para esperar la finalización de un subproceso determinado (y, además, para volver a sintonizar su estado de salida).
Si usas este método, evitarás que el proceso de los zombies permanezca durante demasiado tiempo.
(Alternativamente, puede usar subprocess.call()
o subprocess.check_call()
para llamar y esperar. Si no necesita IO con el proceso, eso podría ser suficiente. Pero probablemente esto no sea una opción, porque puede parece que se supone que dos subprocesos se ejecutan en paralelo, que no lo harán con ( check_
) call()
.)
Si tiene varios subprocesos que esperar, puede hacer
exit_codes = [p.wait() for p in p1, p2]
que vuelve tan pronto como todos los subprocesos hayan terminado. A continuación, tiene una lista de códigos de retorno que tal vez pueda evaluar.
subprocess.call
Espera automáticamente, también puedes usar:
p1.wait()