擅长:python、mysql、java
<p>如果您的平台不是Windows,那么您可以选择子进程的stdout管道。你的应用程序将被阻止,直到:</p>
<ul>
<li>其中一个注册的文件描述符有一个I/O事件(在本例中,我们对子进程的stdout管道上的挂断感兴趣)</li>
<li>投票超时了</li>
</ul>
<p>在Linux 2.6.xx中使用epoll的非充实示例:</p>
<pre><code>import subprocess
import select
poller = select.epoll()
subprocs = {} #map stdout pipe's file descriptor to the Popen object
#spawn some processes
for i in xrange(5):
subproc = subprocess.Popen(["mylongrunningproc"], stdout=subprocess.PIPE)
subprocs[subproc.stdout.fileno()] = subproc
poller.register(subproc.stdout, select.EPOLLHUP)
#loop that polls until completion
while True:
for fd, flags in poller.poll(timeout=1): #never more than a second without a UI update
done_proc = subprocs[fd]
poller.unregister(fd)
print "this proc is done! blah blah blah"
... #do whatever
#print a reassuring spinning progress widget
...
#don't forget to break when all are done
</code></pre>