すぐに学ぶ: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)クリア:イベントのデフォルトはトゥーレに設定されている場合、それはFalseにリセットすることができることは明らかで、Falseです
4)is_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')
return
n += 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()