Python執行緒專題4:Timer物件、Lock物件、Rlock物件

Mark發表於2019-02-16

上一篇文章:Python執行緒專題3:thread物件
下一篇文章:Python執行緒專題5:訊號量與有邊界的訊號量

Timer物件、Lock物件、Rlock物件

Timer物件

Timer物件用於在稍後的某個時間執行一個函式。

語法:
t=Timer(interval,func,args,kwargs)
建立定時器物件,在interval秒後執行函式func,args和kwargs提供傳遞給func的引數和關鍵字引數。
在呼叫start()方法後才能啟動計定時器。
常用方法:
t.start():啟動定時器。

t.cancal():如果函式還未執行,取消定時器。

Lock物件

原始鎖(互斥鎖)是一個同步原語,狀態有兩種:『已鎖定』、『未鎖定』。

如果狀態已經鎖定,嘗試獲取鎖將阻塞,直到鎖被釋放為止。如果有多個執行緒等待獲取鎖,當鎖被釋放時,只有一個執行緒獲得它,獲取順序是不定的。

語法:
lock=Lock()
建立新的Lock物件,初始狀態為未鎖定。
常用方法:
lock.acquire(blocking):獲取鎖,如果有必要,需要阻塞到釋放鎖為止。
如果blocking為false,當無法獲取鎖時將立即返回False,如果成功獲取鎖則返回True。

lock.release():釋放一個鎖,當鎖處於未鎖定狀態時,或者從與原本呼叫acquire()方法的執行緒的不同執行緒呼叫此方法,將會報錯。

Rlock物件

可重入鎖是一個類似於Lock物件的同步原語,但同一個執行緒可以多次獲取它。

它允許擁有鎖的執行緒執行巢狀的acquire()和release()操作。在這種情況下,只有最外層的Release()操作才能將鎖重置微未鎖定狀態。

語法:
rlock=RLock()
建立新的可重入鎖物件。
常用方法:
rlock.acquire(blocking):獲取鎖,如果有必要,需要阻塞到鎖釋放為止。
如果沒有執行緒擁有鎖,它將被鎖定,而且遞迴級別被置為1.
如果此執行緒已經擁有鎖,鎖的遞迴級別加1,而且函式立即返回。

rlock.release():通過減少鎖的遞迴級別來釋放它。如果在減值後遞迴級別為0,鎖將被重置為未鎖定狀態。否則,鎖將保持已鎖定狀態。
只能由目前擁有鎖的執行緒來呼叫此方法。

相關文章