Python on Windows - how to wait for multiple child processes?
asynchronous, python, windows
Solution
It might seem overkill, but, here it goes:
import Queue, thread, subprocess
results= Queue.Queue()
def process_waiter(popen, description, que):
try: popen.wait()
finally: que.put( (description, popen.returncode) )
process_count= 0
proc1= subprocess.Popen( ['python', 'mytest.py'] )
thread.start_new_thread(process_waiter,
(proc1, "1 finished", results))
process_count+= 1
proc2= subprocess.Popen( ['python', 'mytest.py'] )
thread.start_new_thread(process_waiter,
(proc2, "2 finished", results))
process_count+= 1
# etc
while process_count > 0:
description, rc= results.get()
print "job", description, "ended with rc =", rc
process_count-= 1
Problem
How to wait for multiple child processes in Python on Windows, without active wait (polling)? Something like this almost works for me: ``` proc1 = subprocess.Popen(['python','mytest.py']) proc2 = subprocess.Popen(['python','mytest.py']) proc1.wait() print "1 finished" proc2.wait() print "2 finished" ``` The problem is that when `proc2` finishes before `proc1`, the parent process will still wait for `proc1`. On Unix one would use `waitpid(0)` in a loop to get the child processes' return codes as they finish - how to achieve something like this in Python on Windows?