Python線程專題4:Timer對象、Lock對象、Rlock對象

上一篇文章: 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對象

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

若是狀態已經鎖定,嘗試獲取鎖將阻塞,直到鎖被釋放爲止。若是有多個線程等待獲取鎖,當鎖被釋放時,只有一個線程得到它,獲取順序是不定的。segmentfault

語法:
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,鎖將被重置爲未鎖定狀態。不然,鎖將保持已鎖定狀態。
只能由目前擁有鎖的線程來調用此方法。
相關文章
相關標籤/搜索