python在同一时间运行多个命令

时间:2011-01-05 03:00:43

标签: python command

在此之前,我在for循环中运行两个命令,比如 for $ set in $ set:      命令 为了节省时间,我想在同一时间运行这两个命令,如makefile中的并行方法

由于 林恩

3 个答案:

答案 0 :(得分:3)

由于Global Interpreter Lock,线程模块不会给你太多性能。

我认为最好的方法是使用subprocess模块并使用它自己的标准输出打开每个命令。

processes = {}
for cmd in ['cmd1', 'cmd2', 'cmd3']:
    p = subprocess.Popen('cmd1', stdout=subprocess.PIPE)
    processes[p.stdout] = p

while len(processes):
    rfds, _, _ = select.select(processes.keys(), [], [])
    for fd in rfds:
        process = processses[fd]
        print fd.read()

        if process.returncode is not None:
            print "Process {0} returned with code {1}".format(process.pid, process.returncode)
            del processes[fd]

你基本上必须使用select来查看哪些文件描述符已准备就绪,你必须检查它们的返回码,看看是否执行“读取”会导致它们退出。进程基本上进入等待状态,直到stdout关闭。如果您想在等待时做一些事情,可以在select.select()上设置超时,这样您就可以在这么久之后停止等待。您可以测试rfds的长度,如果它是0,那么您就知道发生了超时。

答案 1 :(得分:1)

twistedselect模块可能就是您所追求的目标。

如果你想做的只是一堆批处理命令,shell脚本,即

#!/bin/sh
for i in "command1 command2 command3"; do
    $i &
done

可能会更好地工作。或者,像你说的Makefile。

答案 2 :(得分:0)

查看threading模块。