如何在结构中并行执行多个任务
我知道通过使用-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。 我知道我可以用不同的任务运行多个工艺流程,但我正在寻找一种涉及结构的解决方案。
你有很多方法来解决这个任务。 您可以使用bash / linux级别的作业控件,并使用bg
在后台运行任务,然后wait
它们完成。 解释这种控制机制的文档。
如果你仍然真的想要使用Fabric / Python,你可能需要使用已经在lib中的job_queue
,然后编写你自己的队列来推送它们,或者阅读多处理,然后做一些简单的python forking 。 尽管这基本上是所有job_queue
正在做的。
fabric
每个主机运行一个任务。 -P
交换机仅在不同主机上并行运行任务。 在同一主机上没有并行化。
您可以手动并行化命令,例如,使用xargs -P
或GNU parallel
。
Invoke
(测试版)声明能够并行运行任务。 它从fabric
提取非ssh部分。 如果它安装在远程主机上,则可以使用fabric来调用将在同一主机上并行运行任务的invoke
命令。