簡體   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