Python3併發程式設計之threading模組

2021-10-05 05:46:34 字數 3918 閱讀 1952

建立執行緒物件——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...