您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關Python如何創建線程,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
Python 提供了 _thread 和 threading 兩個模塊來支持多線程,其中 _thread 提供低級別的、原始的線程支持,以及一個簡單的鎖,正如它的名字所暗示的,一般編程不建議使用 thread 模塊;而 threading 模塊則提供了功能豐富的多線程支持。
Python 主要通過兩種方式來創建線程:
使用 threading 模塊的 Thread 類的構造器創建線程。
繼承 threading 模塊的 Thread 類創建線程類。
調用 Thread 類的構造器創建線程
調用 Thread 類的構造器創建線程很簡單,直接調用 threading.Thread 類的如下構造器創建線程:
__init__(self, group=None, target=None, name=None, args=(), kwargs=None, *,daemon=None)
上面的構造器涉及如下幾個參數:
group:指定該線程所屬的線程組。目前該參數還未實現,因此它只能設為 None。
target:指定該線程要調度的目標方法。
args:指定一個元組,以位置參數的形式為 target 指定的函數傳入參數。元組的第一個元素傳給 target 函數的第一個參數,元組的第二個元素傳給 target 函數的第二個參數……依此類推。
kwargs:指定一個字典,以關鍵字參數的形式為 target 指定的函數傳入參數。
daemon:指定所構建的線程是否為后代線程。
通過 Thread 類的構造器創建井啟動多線程的步驟如下:
調用 Thread 類的構造器創建線程對象。在創建線程對象時,target 參數指定的函數將作為線程執行體。
調用線程對象的 start() 方法啟動該線程。
下面程序示范了通過 Thread 類的構造器來創建線程對象:
import threading # 定義一個普通的action函數,該函數準備作為線程執行體 def action(max): for i in range(max): # 調用threading模塊current_thread()函數獲取當前線程 # 線程對象的getName()方法獲取當前線程的名字 print(threading.current_thread().getName() + " " + str(i)) # 下面是主程序(也就是主線程的執行體) for i in range(100): # 調用threading模塊current_thread()函數獲取當前線程 print(threading.current_thread().getName() + " " + str(i)) if i == 20: # 創建并啟動第一個線程 t1 =threading.Thread(target=action,args=(100,)) t1.start() # 創建并啟動第二個線程 t2 =threading.Thread(target=action,args=(100,)) t2.start() print('主線程執行完成!')
上面程序中的主程序包含一個循環,當循環變量 i 等于 20 時創建并啟動兩個新線程:
創建了一個 Thread 對象,該線程的 target 為 action,這意味著它會將 action 函數作為線程執行體。接下來程序調用 start() 方法來啟動t1線程。
再次創建了一個線程,其創建和啟動方式與第一個線程完全相同。
運行上面程序,將會看到如圖所示的界面。
雖然上面程序只顯式創建并啟動了兩個線程,但實際上程序有三個線程,即程序顯式創建的兩個子線程和主線程。前面己經提到,當 Python 程序開始運行后,程序至少會創建一個主線程,主線程的線程執行體就是程序中的主程序(沒有放在任何函數中的代碼)。
從上圖可以看出,此時程序中共包含三個線程,這三個線程的執行沒有先后順序,它們以并發方式執行:Thread-1 執行一段時間,然后可能 Thread-2 或 MainThread 獲得 CPU 執行一段時間,接下來又換其他線程執行,這就是典型的線程并發執行,CPU 以快速輪換的方式在多個線程之間切換,從而給用戶一種錯覺,即多個線程似乎同時在執行。
通過上面介紹不難看出多線程的意義,如果不使用多線程,主程序直接調用兩次 action() 函數,那么程序必須等第一次調用的 action() 函數執行完成,才會執行第二次調用的 action() 函數;必須等第二次調用的 action() 函數執行完成,才會繼續向下執行主程序。
上述就是小編為大家分享的Python如何創建線程了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。