1. 程式人生 > >《Python多執行緒的初步使用》—人生苦短,我用Python(七)

《Python多執行緒的初步使用》—人生苦短,我用Python(七)

寫在前面:

最近,博主在之前開發的網路配置自動化工具的基礎上,進行了修改。將該工具改為多執行緒,執行效率大大提升。原本可能需要半個小時以上跑完的任務,現在只需要幾十秒。

下面我們來看看是怎麼實現的吧~


先看東西:

首先引入threading模組

import threading

引入之後,我們要選擇,我們針對什麼需求,建立多執行緒

在這裡,因為我開發的是網路配置自動化工具;那麼,我需要的是,針對每一次登入網路裝置執行相關配置指令碼的這一需求,建立多執行緒。

首先,我們建立threads變數,將它引入為列表的形式

threads=[]

建立好後,我們需要思考,我們以什麼為依據建立多執行緒;同樣,因為我們是要登入網路裝置,進行配置。那麼,我可以選擇以有多少臺網絡裝置、多少個IP地址等等,建立多執行緒。

這裡我選擇,以有多少個裝置的IP地址,就建立多少個執行緒。達到同時登入多臺網路裝置,同時進行配置的效果。

確定需要建立多少個執行緒後,我們需要在之前建立的threads變數中,新增任務。

任務可以是你之前定義好的一種方法,像我這裡,就是將之前開發好的登入網路裝置、執行指令碼的動作定義為NetmikoConfig這一方法,該方法依次需要輸入的引數如下:,裝置名、裝置Ip地址、裝置型別、使用者名稱和密碼。我們將該任務新增到threads列表中

for i in range(len(ipList)):
t=threading.Thread(target=NetmikoConfig,args=(deviceName,ipList[i],deviceType,username,password))
threads.append(t)

這裡我理解的是,現在在threads這個列表變數中,我們已經將任務新增進去,之後,開啟該列表中的任務即可。

if __name__=='__main__':
for i in range(len(ipList)):
threads[i].start()

在這裡,為了避免主執行緒結束,而子執行緒還沒有跑完,需要加入阻塞機制,這裡使用的是join

join的左右就是執行緒同步,可以簡單理解為,將子執行緒也join到主執行緒中,主執行緒需要等待子執行緒跑完後,主執行緒才會繼續向下執行。

所以,這裡有多少個執行緒,就都需要加入到主執行緒進行阻塞

for i in range(len(ipList)):

threads[i].join()

這樣,當子執行緒全部執行完成後,主執行緒才會繼續執行。


總結:

本篇文章僅總結了如何建立執行緒和初步的使用執行緒的方法,面對多執行緒的需求,還有很多值得我們僅一步研究的東西,如如何應對多執行緒同時對一個數據進行修改,如何使用執行緒鎖等等。而本文提到的針對同時登陸裝置,進行操作這樣的場景,不需要考慮這些問題,所以也比較簡單。