您
可以使用indipendent處理(multiprocessing.Process),並使用兩個隊列與它(multiprocessing.Queue)一個用於輸入和另一個用於輸出進行通信。在啓動的過程中 實施例:
import multiprocessing
def processWorker(input, result):
work = input.get()
## execute your command here
pipe = subprocess.Popen(command, stdout = subprocess.PIPE,
stderr = subprocess.PIPE, shell = True)
stdout, stderr = pipe.communicate()
result.put(pipe.returncode)
input = multiprocessing.Queue()
result = multiprocessing.Queue()
p = multiprocessing.Process(target = processWorker, args = (input, result))
p.start()
commandlist = ['ls -l /', 'ls -l /tmp/']
for command in commandlist:
input.put(command)
for i in xrange(len(commandlist)):
res = result.get(block = True)
if not res is 0:
print 'One command failed'
然後就可以跟蹤哪些命令是由每個子進程簡單地存儲關聯於workid命令執行過程中(workid可以是遞增的計數器,當隊列獲得填充有新工作)。 multiprocessing.Queue的使用非常強大,因爲您不需要依賴stdout/err解析並避免相關限制。 此外,您可以輕鬆管理更多子流程。
然後,你還可以設置你想要多久get調用等待在最大超時,如:
import Queue
try:
res = result.get(block = True, timeout = 10)
except Queue.Empty:
print error
有一個看看'multiprocessing'模塊。它使得它更清潔,並且實際上是同樣的東西(它在Linux上更加高效,因爲它會影響當前進程。在Windows上,我認爲它與啓動多個新的Python進程是一樣的)。但是,如果您確實想要完成您所描述的內容,請查看「subprocess」模塊而不是「os.startfile」。 –