【问题标题】:python run multi command in the same timepython同时运行多个命令
【发布时间】:2011-01-05 03:00:43
【问题描述】:

在此之前,我在 for 循环中运行了两个命令,例如 对于 $set 中的 x: 命令 为了节省时间,我想同时运行这两个命令,就像makefile中的并行方法一样

谢谢 林恩

【问题讨论】:

标签: python command


【解决方案1】:

由于全局解释器锁,线程模块不会为您提供太多性能方面的信息。

我认为最好的方法是使用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 来查看哪些文件描述符已准备就绪,并且您必须检查它们的返回码以查看执行“读取”是否导致它们退出。进程基本上进入等待状态,直到它们的标准输出关闭。如果你想在等待的时候做一些事情,你可以在 select.select() 上设置一个超时,这样你就可以在这么久之后停止等待。你可以测试一下 rfds 的长度,如果是 0 就知道超时了。

【讨论】:

    【解决方案2】:

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

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

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

    可能会更好。或者,像你说的那样的 Makefile。

    【讨论】:

      【解决方案3】:

      查看threading 模块。

      【讨论】:

        猜你喜欢
        • 2015-04-02
        • 1970-01-01
        • 1970-01-01
        • 2021-04-06
        • 2015-10-27
        • 2013-11-24
        • 2023-03-23
        • 2023-04-03
        • 1970-01-01
        相关资源
        最近更新 更多