2014-03-27 47 views
7

我知道通过使用-P switch或@parallel标签,我可以在多台主机上并行运行任务。如何在结构中并行执行多个任务

我想并联同一主机上执行多长时间运行的任务:

@task 
def task1(): 
    # long running op 

@task 
def task2(): 
    #long running op 

@task 
def task3(): 
    #long running op 

@task 
def backup_all(): 
    execute(task1) 
    execute(task2) 
    execute(task3) 

如何开始TASK1,TASK2和TASK3并行使用布在同一主机上。 我知道我可以用不同的任务运行多个工艺流程,但我正在寻找一种涉及结构的解决方案。

回答

2

您有很多方法可以解决此任务。您可以使用bash/linux级别的作业控件,并在后台运行bg,然后wait完成任务。 Documentation explaining this风格的控制机制。

如果你仍然真的想使用Fabric/Python来做这件事,你可能需要使用已经在lib中的job_queue,然后编写你自己的队列来推送它们,或者read up on multiprocessing,只需要做一些简单的python分叉。虽然这基本上都是job_queue正在做的。

+0

因为没有“正确的”答案,因为Fabric不支持这个,我会选择这个答案。这是最接近我想要的解决方案。谢谢。 –

2

fabric每个主机运行一个任务。 -P switch just runs task in parallel on different hosts。在同一主机上没有并行化。

您可以手动并行化命令,例如使用xargs -PGNU parallel

Invoke (beta)声称能够并行运行任务。它从fabric中提取非ssh部分。如果它安装在远程主机上,那么您可以使用fabric来调用invoke命令,该命令将在同一主机上并行运行任务。

+0

我会调查Invoke,谢谢。 –