立即學習:https://edu.csdn.net/course/play/24458/296447?utm_source=blogtoedu
threading.Event事件
?
1.概念及功能:主要是完成線程之間的通信,將另一個線程的運行狀態通知給另一個線程
?
2.使用場景:
1)客戶端運行時等待服務器啟動連接,若等待時間過長或者嘗試連接次數過多,提示連接失敗。只有等服務器啟動事件成功后,才會進行連接事件
?
3.Event的相關屬性
1)Event.wait():表示等待,括號里面可以加上特定的等待時間
2)Event.set():給等待發送一個信號,等待著的線程就會繼續運行
3)clear:Event默認是False,當被set后為Ture,clear可以使得其重新設置為False
4)is_set():判斷事件是否已經被set
?
4.代碼
from threading import Thread,Event,currentThread
import time#創建事件對象
event = Event()
#創建客戶端函數模擬客戶端連接
def client():n = 0#設置等待取消的條件函數,如果嘗試連接的次數超過5次,則退出等待,因為event.wait的時間是0.5,最多等5次,需要2.5秒,而在server中沉睡了5秒,因此會等不到event.set()的執行就退出等待while not event.is_set():if n == 5:print('%s is failed to connect the server')returnn += 1#這里需要注意return和break的區別,break只是跳出循環,而return是跳出函數,如果用break會使得返回連接成功的信息print('%s is trying to connect......'%currentThread().getName())print('*'*20,'%s第%s次嘗試連接'%(currentThread().getName(),n),'*'*20)event.wait(0.5)#等待事件的發生,等待set#print('%s is connected'%currentThread().getName())#創建服務端函數模擬服務器
def server():print("%s is trying to start"%currentThread().getName())time.sleep(3)event.set()if __name__ == '__main__':for i in range(3):c = Thread(target=client)c.start()s = Thread(target=server)s.start()