我知道通过使用-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流程,但我正在寻找一种涉及结构的解决方案。
答案 0 :(得分:2)
fabric
每个主机运行一个任务。 -P
switch just runs task in parallel on different hosts。在同一主机上没有并行化。
您可以手动并行化命令,例如,使用xargs -P
或GNU 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
正在做的事情。