学习笔记(30):Python网络编程并发编程-Event事件
生活随笔
收集整理的這篇文章主要介紹了
学习笔记(30):Python网络编程并发编程-Event事件
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
立即學習:https://edu.csdn.net/course/play/24458/296447?utm_source=blogtoedu
threading.Event事件
?
1.概念及功能:主要是完成線程之間的通信,將另一個線程的運行狀態(tài)通知給另一個線程
?
2.使用場景:
1)客戶端運行時等待服務器啟動連接,若等待時間過長或者嘗試連接次數(shù)過多,提示連接失敗。只有等服務器啟動事件成功后,才會進行連接事件
?
3.Event的相關屬性
1)Event.wait():表示等待,括號里面可以加上特定的等待時間
2)Event.set():給等待發(fā)送一個信號,等待著的線程就會繼續(xù)運行
3)clear:Event默認是False,當被set后為Ture,clear可以使得其重新設置為False
4)is_set():判斷事件是否已經(jīng)被set
?
4.代碼
from threading import Thread,Event,currentThread import time#創(chuàng)建事件對象 event = Event() #創(chuàng)建客戶端函數(shù)模擬客戶端連接 def client():n = 0#設置等待取消的條件函數(shù),如果嘗試連接的次數(shù)超過5次,則退出等待,因為event.wait的時間是0.5,最多等5次,需要2.5秒,而在server中沉睡了5秒,因此會等不到event.set()的執(zhí)行就退出等待while not event.is_set():if n == 5:print('%s is failed to connect the server')returnn += 1#這里需要注意return和break的區(qū)別,break只是跳出循環(huán),而return是跳出函數(shù),如果用break會使得返回連接成功的信息print('%s is trying to connect......'%currentThread().getName())print('*'*20,'%s第%s次嘗試連接'%(currentThread().getName(),n),'*'*20)event.wait(0.5)#等待事件的發(fā)生,等待set#print('%s is connected'%currentThread().getName())#創(chuàng)建服務端函數(shù)模擬服務器 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() 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的学习笔记(30):Python网络编程并发编程-Event事件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git 多用户多仓库配置
- 下一篇: 学习笔记(31):Python网络编程并