當前位置:成語大全網 - 書法字典 - python多線程的幾種方法

python多線程的幾種方法

python Advanced(26)-多線程實現同步的四種方法

關鍵資源是壹次只能由壹個線程訪問的資源。壹個典型的例子就是打印機,它壹次只能被壹個程序用來執行打印功能,因為多線程不能同時運行,訪問這部分資源的代碼通常被稱為臨界區。

鎖定機構

線程的鎖類,使用這個類的獲取函數來鎖定,使用realease函數來解鎖。

導入線程導入時間類編號:

def __init__(self):

self.num = 0

self.lock =線程。Lock() def add(self):

Self.lock.acquire()#鎖定並鎖定相應的資源。

self.num += 1

編號= self.num

Self.lock.release()#解鎖並離開資源。

退貨數量

n = Num()類jdThread(線程。線程):

def __init__(self,item):

threading.Thread.__init__(self)

self.item =項目定義運行(self):

時間.睡眠(2)

Value = n.add()#將1加到num上,輸出原始數據和+1之後的數據。

打印範圍(5)中的項目(自身項目,值):

t = jdThread(項目)

啟動()

T.join()#使線程逐個執行123456789111213141515151565438。

當線程調用鎖的acquire()方法獲取鎖時,鎖進入“鎖定”狀態。壹次只有壹個線程可以獲得鎖。如果此時另壹個線程試圖獲取這個鎖,就會變成“阻塞”狀態,這種狀態稱為“同步阻塞”(參見多線程的基本概念)。

直到擁有鎖的線程調用鎖的release()方法來釋放鎖,鎖才進入“解鎖”狀態。線程調度器選擇其中壹個處於同步阻塞狀態的線程獲取鎖,並使該線程進入運行狀態。

旗語

信號量還提供了獲取方法和釋放方法。每當調用acquire方法時,如果內部計數器大於0,它將被減去1。如果內部計數器等於0,線程將被阻塞,直到線程調用release方法將內部計數器更新到大於1的位置。

導入線程導入時間類編號:

def __init__(self):

self.num = 0

self . SEM = threading . semantic(value = 3)#最多允許三個線程同時訪問資源。

定義添加(自身):

Self.sem.acquire()#內部計數器減1。

self.num += 1

編號= self.num

Self.sem.release()#內部計數器加1

退貨數量

n = Num()類jdThread(線程。線程):

def __init__(self,item):

threading.Thread.__init__(self)

self.item =項目定義運行(self):

時間.睡眠(2)

value = n.add()

打印範圍(100)內的項目(自身項目,值):