繁体   English   中英

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

[英]Fabric running commands on different hosts in parallel using threads

我正在使用 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()

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

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

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

有关所有选项,请参阅有关并行执行的 Fabric 文档

至于线程支持,请参阅常见问题解答 - Fabric 线程安全吗? . 当前的 Fabric 1.10 仍然不是线程安全的:

Fabric 线程安全吗?

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

更新:

Fabric 现在是线程安全的: 从 1.x 升级

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM