如何在Fabric中并行执行多个任务

时间:2014-03-27 16:16:59

标签: python parallel-processing fabric

我知道通过使用-P开关或@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)

如何使用fabric在同一主机上并行启动task1,task2和task3。 我知道我可以使用不同的任务运行多个fab流程,但我正在寻找一种涉及结构的解决方案。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

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

如果您仍然真的想使用Fabric / Python,那么您可能需要使用已经在lib中的job_queue并排序编写自己的队列以将其推入,或{{3}并且只做一些简单的python forking。虽然这基本上都是job_queue正在做的事情。