Fabric使用线程并行运行不同主机上的命令

时间:2015-05-06 08:52:35

标签: python python-2.7 fabric

我使用fab在远程主机上运行命令。我无法使用内置的fab并行执行模式,因为我的代码是由一些我无法控制的库调用的。它创建了多个线程,并使用不同的主机参数调用我的驱动程序(主机)方法。

下面是我试图实现它的代码示例。

def setup_env_for_fab(host, user):
  env.host_string = host
  env.user = user

def run_command():
  run("python some_program.py")

def driver(host):
  setup_env_for_fab(host, "ubuntu")
  run_command()

因此,具有不同主机参数的多个线程可以调用驱动程序(主机)功能。如果不同的线程同时调用驱动程序(主机),这会在不同的主机上并行运行命令吗? 如果这不能按预期工作,我怎么能实现这个目标?

1 个答案:

答案 0 :(得分:2)

如果您不需要,请不要手动滚动。 Fabric使用multiprocessing内置并行执行,例如使用-P CLI标志:

$ fab -H web1,web2,web3 -P driver

有关所有选项,请参阅Fabric docs on parallel execution

关于线程支持,请参阅FAQ - Is Fabric thread-safe?。当前Fabric 1.10仍然不是线程安全的:

  

Fabric是否是线程安全的?

     

目前,不,不是 - 当前版本的Fabric严重依赖共享状态,以保持代码库简单。但是,有明确的计划更新其内部结构,以便Fabric可以是线程化的或以其他方式并行化,因此您的任务可以同时在多个服务器上运行。