91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Fabric中怎么批量管理遠程服務器

發布時間:2021-06-26 14:25:12 來源:億速云 閱讀:190 作者:Leah 欄目:大數據

本篇文章為大家展示了Fabric中怎么批量管理遠程服務器,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

Fabric 通過 Group 來組合多臺服務器。區別在于由 fabric.group.Group 基類(父類)派生出的兩個子類:  
  • SerialGroup(*hosts, **kwargs):按串行方式執行操作
  • ThreadingGroup(*hosts, **kwargs):按并發方式執行操作

下面先看看這個基類:

Fabric中怎么批量管理遠程服務器  
我把一些沒用的信息折疊了,比較值得注意的內容有:  
  • Group 繼承了 list,所以能夠 extend() ,對傳入的服務器分別建立 connection
  • 核心的 run() 方法沒有寫實現,用意是留給子類再實現
  • 最后的 __enter__() 和 __exit__() 實現了上下文管理器

有了這個基類,接下來就要看 SerialGroup 和 ThreadingGroup 的具體實現了。

Fabric中怎么批量管理遠程服務器  

SerialGroup 類很簡單,只實現了一個 run() 方法。因為類在初始化時為所有 host 建立了連接而且存了起來,所以這里只需用 for 循環依次取出,再執行 Connection 的 run() 方法。

這里可以看到一種非常實用的開發技巧:創建類時,讓它繼承內置的數據結構(如 list、dict), 這樣可以直接使用  self.append()、self.extend()、self.update() 等方法把關鍵的信息存到“自身”,再到取出時則“for xxx in self”,這樣就免了創建臨時的 list 或 dict,也免得要在參數中傳來傳去。

GroupResult 和 GroupException 是對執行結果和異常的處理,不是我們關注的重點,這里略過。

接下來看看 ThreadingGroup,它也只有一個 run() 方法:

Fabric中怎么批量管理遠程服務器  

ExceptionHandlingThread 是一個繼承了 threading.Thread 的類,這是一種創建多線程的方式。每個線程執行的方法主要做兩件事:執行 connection 的 run() 方法,以及將執行成功的結果存入隊列中。

Fabric中怎么批量管理遠程服務器  

接下來再分別把執行成功的結果與出異常的結果都存入到 results 中。

所以,Fabric 是使用了 threading 多線程的方式來實現并發。網絡請求是 IO 密集型的,使用多線程是不錯的方式。

至此,對于我們在開頭提的問題,就有了一個初步的答案:Fabric 封裝了兩種 Group 來批量管理服務器,其中串行方式就是用了簡單的 for 循環,而并發方式使用了 threading 多線程方式。

但是,通過分析這兩種 Group 的實現代碼(以及使用的實踐),我們也可以發現 Fabric 的缺陷:  
  • Group 只實現了 run() 方法,但是 Connection 的 put()、get()、sudo() 等方法都沒有,這意味著用這種方式管理服務器集群時,只能在上面執行 shell 命令……
  • 每次調用 run() 方法時,它要等所有主機都執行完,才會返回結果,這意味著先執行完的主機會被阻塞。更為致命的是,如果其中一臺主機執行時出了異常,整個 run() 方法就拋異常,這意味著每次使用 run() 方法時,都需要作異常捕獲
  • run() 方法支持執行單條 shell 命令,但是命令的狀態不會傳遞。假設先在一個 run() 方法中運行 cd 命令切到 A 目錄(非根目錄),再在下一個 run() 方法創建一個文件,最終結果是該文件并不在 A 目錄,而是在默認目錄。解決辦法是用“&&”連接起多條命令,略顯麻煩


上述內容就是Fabric中怎么批量管理遠程服務器,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岳西县| 吉林省| 时尚| 奉贤区| 庐江县| 鄂托克旗| 宿松县| 咸阳市| 新丰县| 禄丰县| 永修县| 沛县| 南召县| 黄大仙区| 安义县| 城口县| 米林县| 静宁县| 淳化县| 旬邑县| 布拖县| 普定县| 垫江县| 沭阳县| 辽宁省| 定襄县| 玛沁县| 疏勒县| 泌阳县| 阳朔县| 虎林市| 临洮县| 潞西市| 瑞金市| 威信县| 通化市| 高密市| 四平市| 许昌县| 民丰县| 额济纳旗|