如何在Windows上的Python中等待多个子进程,而不进行活动等待(polling)?像这样的东西几乎对我有效:
proc1 = subprocess.Popen(['python','mytest.py'])
proc2 = subprocess.Popen(['python','mytest.py'])
proc1.wait()
print "1 finished"
proc2.wait()
print "2 finished"
问题是,当proc2
在proc1
之前完成时,父进程仍将等待proc1
。在Unix上,人们会在循环中使用waitpid(0)
来获取子进程完成时的返回代码-如何在Windows上的Python中实现这样的功能?
看起来有点过头了,但是,这里有:
基于zseil的答案,您可以通过混合使用子进程和win32 API调用来实现这一点。我使用了直接的ctypes,因为我的Python没有安装win32api。我只是从MSYS中生成sleep.exe作为一个例子,但是很明显你可以生成任何你喜欢的进程。我使用OpenProcess()从进程的PID中获取一个句柄,然后WaitForMultipleObjects等待任何进程完成。
Twisted有一个在Windows上工作的asynchronous process-spawning API。实际上有几个不同的实现,其中许多不是很好,但您可以在它们之间切换,而不必更改代码。
相关问题 更多 >
编程相关推荐