【问题标题】:How to execute multiple tasks in parallel in fabric如何在fabric中并行执行多个任务
【发布时间】:2014-03-30 02:00:10
【问题描述】:

我知道通过使用-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。 我知道我可以运行具有不同任务的多个晶圆厂流程,但我正在寻找一种涉及织物的解决方案。

【问题讨论】:

  • 您可以尝试使用threadingmultiprocessing。我以前没用过,但觉得很有趣exercise

标签: python parallel-processing fabric


【解决方案1】:

您有多种方法来完成这项任务。您可以使用 bash/linux 级别的作业控制,并在后台使用bg 运行任务,然后使用wait 让它们完成。 Documentation explaining this风格的控制机制。

如果您仍然真的想为此使用 Fabric/Python,您可能需要使用库中已经存在的 job_queue 并编写您自己的队列以将它们推送到,或者 read up on multiprocessing 并执行一些简单的python分叉。虽然这基本上是job_queue 所做的一切。

【讨论】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 2015-11-18
    相关资源
    最近更新 更多