您
可以使用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”。 –