建立執行緒物件——threading.thread()
引數:引數
描述group=none
該類中的待擴充套件引數。
target = none
目標函式,即被開闢執行緒的執行任務。預設值為none,表示什麼都不執行。
name=none
該執行緒的名稱。在預設情況下,執行緒的唯一名稱以「 thread- n 」 的形式構造,其中n是乙個十進位制數字。
args=()
值是乙個元組,包含目標函式的所需引數。
kwargs={}
值是乙個字典,包含目標函式所需引數。
daemon=none
引數值true、false決定了該執行緒是否為守護執行緒(後台執行緒)。若使用預設值none,該引數會從當前執行緒執行。
建立執行緒物件的兩種方法
1、threading.thread()類實現。
2 、繼承threading.thread()類,並重寫父類的__init__以及run()方法。
import threading
class
mythread
(threading.thread)
:def
__init__
(self,name)
:# 向父類傳遞引數。
super()
.__init__(name=name)
defrun
(self)
:# 列印執行執行緒的名稱。
thread_name = threading.current_thread(
).name
print
(thread_name)
if __name__ ==
'__main__'
: threads =
[mythread(
'執行緒%d'
%(order,))
for order in
range(6
)]for thread in threads:
thread.start(
)for thread in threads:
thread.join(
)
執行結果
執行緒0注:執行緒1執行緒2
執行緒3執行緒4
執行緒5
建立新執行緒需要呼叫start()方法,該方法又會呼叫該物件的run()方法。與直接呼叫run()方法不同的是,呼叫start()方法會建立乙個新的執行緒,而run()不能。
thread()類例項化物件的方法及屬性
描述物件
方法start()
啟動執行緒。
join(timeout=none)
阻塞呼叫執行緒。直到呼叫物件完成其任務或觸發超時。
is_alive()
返回執行緒的活動狀態,返回值型別為布林型別。
isdaemon()
返回執行緒是否為守護執行緒的判斷結果,返回值型別為布林型。
setdaemon()
設定daemon的值。
getname()
獲取執行緒名稱。
setname()
設定執行緒名稱。
name
執行緒名稱。
ident
執行緒id。
daemon
指定該執行緒是否為守護執行緒(守護執行緒),值的選擇及其影響參見第一部分(建立執行緒物件——threading.thread()類)。
threading的鎖物件
1、threading.lock()
建立乙個鎖物件,任何執行緒都可以獲得該鎖或釋放鎖。最先到達的執行緒獲得鎖後,其他執行緒執行到該鎖時將被阻塞,直到該鎖被其他執行緒釋放。
lock物件的方法:方法
描述acquire(blocking=true,timeout=-1)
當blocking的值為true時,只允許乙個執行緒執行與lock鎖相關聯區域。如果將timeout設定為非負數,則最多阻塞timeout秒;當blocking的值為false時,與執行緒無鎖無異。
release()
釋放鎖。如果在沒有執行緒擁有該鎖時執行將引發runtimeerror錯誤。
locked()
在鎖被某一線程擁有時,返回true;反之返回false。
2、threading.rlock()
rlock全稱為reentrantlock,即可重入鎖也稱遞迴鎖。該鎖有三個特點:
1、誰拿到鎖,誰能釋放。
2、同一執行緒可以多次拿到該鎖。
3、acquire多少次就必須release多少次,並且只有最後一次release才能改變鎖的狀態。
rlock物件的方法:方法
描述acquire(blocking=true,timeout=-1)
當blocking的值為true時,只允許乙個執行緒執行與rlock鎖相關聯區域。如果將timeout設定為非負數,則最多阻塞timeout秒;當blocking的值為false時,與執行緒無鎖無異。
release()
釋放鎖。如果在沒有執行緒擁有該鎖時執行將引發runtimeerror錯誤。
建立訊號量物件——threading.semaphore()
訊號量是由乙個內部變數構成的,它標識出了對該鎖關聯資源的併發訪問量。
該類只有乙個引數value,預設值為一,它指定了訊號量的初始值。如果該引數值小於零,將引發valueerror錯誤。
semaphore物件的方法方法
描述acquire(blocking=true,timeout=none)
與lock和rlock物件的相同方法不同的是,呼叫該方法會使訊號量減一。
release()
與lock和rlock物件的相同方法不同的是,呼叫該方法會使訊號量加一。
建立條件物件——threading.codition()
該類的例項化物件具有建立鎖的能力。某乙個執行緒在在獲得鎖後可以呼叫codition.wait()實現對該執行緒的阻塞,直到接受到其他執行緒的喚醒指令。
codition()類具有引數lock,指定例項化物件能夠使用哪一種鎖,值是乙個lock或rlock的鎖物件。
codition物件的方法方法
描述acquire()
獲取鎖。其引數與lock或rlock的例項化物件的相同方法的引數一致。
release()
釋放鎖。
wait(timeout=none)
該執行緒被掛起,直到接受到乙個notify通知或觸發超時才能夠被喚醒。
notify(n=1)
喚醒其他執行緒,最多喚醒n個等待程序。notify()必須在已獲得lock前提下才能呼叫,否則會觸發runtimeerror錯誤。
notifyall()
喚醒所有等待程序。
建立事件物件——threading.event()
事件物件內部具有乙個標誌,可以通過set()方法將其設定值為true,也可以通過clear()方法將其設定為初始值,即false。event.wait()方法會阻塞執行緒,直到標誌變為true為止。
event物件的方法方法
描述set()
將內部標誌變為true。
is_set()
返回內部標誌的值 。
isset()
同is_set()。
clear()
將內部標誌重置為false。
wait(timeout=none)
阻塞呼叫執行緒,直到內部標誌為true,或觸發超時。
python3核心程式設計之執行緒
啟動執行緒 thread.start 建立執行緒 threading.thread target 繼承方式建立 class mythread threading.thread def run self 建立鎖mutex threading.lock 鎖定mutex.acquire blocking ...
Python3並行程式設計之queue模組
匯入模組import queue匯入模組中無第三方模組 注 queue是python的標準庫。該庫在python2中名為queue,在python3中名為queue。三種型別的佇列 queue模組實現了三種型別的佇列,它們的區別僅僅是資料取回的順序。在 fifo 佇列中,先新增的資料先取回。在 li...
python3介面程式設計 Python3程式設計技巧
in 1 fromrandom import randint in 2 data randint 10,10 for in range 10 in 3 data out 3 3,4,3,4,7,2,4,1,7,9 過濾列表中的負數 in 9 list filter lambda x x 0,data...