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上面程式中的主程式包含乙個迴圈,當迴圈變數 i 等於 20 時建立並啟動兩個新執行緒:# 定義乙個普通的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('主線程執行完成!')
建立了乙個 thread 物件,該執行緒的 target 為 action,這意味著它會將 action 函式作為執行緒執行體。接下來程式呼叫 start() 方法來啟動t1執行緒。
再次建立了乙個執行緒,其建立和啟動方式與第乙個執行緒完全相同。
執行上面程式,將會看到如圖所示的介面。
雖然上面程式只顯式建立並啟動了兩個執行緒,但實際上程式有三個執行緒,即程式顯式建立的兩個子執行緒和主線程。前面己經提到,當 python 程式開始執行後,程式至少會建立乙個主線程,主線程的執行緒執行體就是程式中的主程式(沒有放在任何函式中的**)。
從上圖可以看出,此時程式中共包含三個執行緒,這三個執行緒的執行沒有先後順序,它們以併發方式執行:thread-1 執行一段時間,然後可能 thread-2 或 mainthread 獲得 cpu 執行一段時間,接下來又換其他執行緒執行,這就是典型的執行緒併發執行,cpu 以快速輪換的方式在多個執行緒之間切換,從而給使用者一種錯覺,即多個執行緒似乎同時在執行。
通過上面介紹不難看出多執行緒的意義,如果不使用多執行緒,主程式直接呼叫兩次 action() 函式,那麼程式必須等第一次呼叫的 action() 函式執行完成,才會執行第二次呼叫的 action() 函式;必須等第二次呼叫的 action() 函式執行完成,才會繼續向下執行主程式。
本文**於
Python 執行緒(一) 建立執行緒
python中有兩個執行緒模組,分別是thread和threading,threading是thread的公升級版。threading的功能更強大。建立執行緒有3種方法 1 thread模組的start new thread函式 2 繼承自threading.thread模組 3 用theading...
Python執行緒的建立
python執行緒開啟的2中方式 一種是傳參 另一種寫乙個類繼承thread類 usr bin python coding utf8 開啟from threading import thread import os def work name print s say hello name if na...
python 建立多執行緒
import time import threading defsing for i in range 0,5 print 正在唱歌 time.sleep 1 defdance for i in range 0,5 print 正在跳舞 time.sleep 1 defmain create a t...