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

7

我知道通过使用-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在同一主机上并行启动任务1、任务2和任务3。我知道可以运行多个具有不同任务的fab进程,但我正在寻找涉及fabric的解决方案。


你可以尝试使用 threadingmultiprocessing。虽然我之前从未使用过,但认为这可能是一个有趣的 练习 - quapka
2个回答

2

fabric在每个主机上运行一个任务。-P开关只是在不同的主机上并行运行任务,不能在同一主机上进行并行化。

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

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


2
你有多种方式来解决这个任务。你可以使用bash/linux级别的作业控制,在后台运行任务并使用bg,然后等待它们完成。这里有一份文档,解释了这种控制机制。 如果你还是想使用Fabric/Python,你可能需要使用已经在库中的job_queue,并编写自己的队列来推送进去;或者阅读有关multiprocessing的介绍,然后进行一些简单的Python分叉。虽然这本质上就是job_queue正在做的所有事情。

由于Fabric不支持此功能,因此没有“正确”答案,我会选择这个答案。它是我想要的最接近的解决方案。谢谢。 - Christian P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接