是時候了解更多 python 中的線程了。在本教程中,我們將介紹一個重要的類,Event
類,它在 python 中用于線程同步。
這個類通過生成事件用于線程間通信。
Python 多線程:事件對象
事件類對象提供了一種簡單的機制,用于線程之間的通信,其中一個線程發出事件信號,而其他線程等待它。因此,當一個用于產生信號的線程產生信號時,等待的線程就會被激活。
一個內部標志被稱為事件標志的事件對象使用,該標志可以使用set()
方法設置為真,并且可以使用clear()
方法重置為假。
wait()
方法阻塞一個線程,直到它正在等待的事件標志被任何其他線程設置為真..
以下是與事件對象一起使用的有用函數:
初始化事件對象
我們可以如下初始化事件對象:
import threading
are_you_coming = threading.Event()
當我們像這樣初始化一個事件對象時,默認情況下內部標志被設置為假。
isSet()
方法
當且僅當內部標志為真時,此方法返回真。
import threading
are_you_coming = threading.Event()
print(are_you_coming.isSet())
錯誤的
set()
方法
當對任何事件對象調用此方法時,內部標志被設置為 true。一旦為任何事件調用set()
方法,所有等待它的線程都會被喚醒。
clear()
方法
此方法將內部標志重置為 false。隨后,對調用clear()
的事件調用wait()
的線程將阻塞,直到內部標志再次不為真。
wait([timeout])
方法
當我們必須讓任何線程等待一個事件時,我們可以這樣做:在內部標志設置為 false 的事件上調用這個方法,這樣做將阻塞線程,直到事件的內部標志為 true。
如果入口時內部標志為真,則線程永遠不會被阻塞。否則,它將被阻止,直到另一個線程調用set()
將標志設置為真,或者直到可選超時發生。timeout 參數以秒為單位指定操作超時。
舉個例子
讓我們有一個簡單的代碼示例來演示Event
類對象的用法。
在下面的代碼中,我們將創建一個線程,讓它等待一個由主線程生成的事件,釋放第一個線程。
在上面的程序中,我們也使用了wait()
方法的timeout
屬性。
當線程調用wait([timeout])
方法時,如果在接收事件對象時釋放等待,則該方法返回布爾值真,否則如果由于超時而釋放等待,則該方法返回假。
為了測試這一點,更改第 18 行作為參數args=(e,4)
發送的超時值,并使其小于睡眠時間,例如,將超時值設置為 2 并查看輸出。