Platformunuz Windows değilse, büyük olasılıkla alt işlemleriniz için stdout borularına karşı seçim yapabilirsiniz. Kayıtlı dosya tanımlayıcıları
- Bir
- anket kez (bu durumda, biz altişlem en stdout'u borusunda bir mesele ilgilendiğiniz) bir I/O etkinliği vardır: ya kadar Uygulamanız sonra bloke edecek dışarı
Sigara tenli aşımı Linux 2.6.xx ile epoll kullanarak örnek:
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
evet, sorun, ilk alt işlemin çok yavaş olduğunu, p ilk 'ps'ye eşit olduğunu ve python'un beklediğinden yüzeyler; python, ilk hariç tüm alt süreçleri yazamaz. –