from threading import Event
python
線程間狀態同步:即將一個任務丟到子進程中,這個任務將異步執行,如何獲取到這個任務的執行狀態服務器
注意:執行狀態和執行結果不是同一個概念,異步回調拿到的是任務的執行結果異步
假設函數
一個線程 負責啓動服務器 啓動服務器須要花必定的時間操作系統
另外一個線程做爲客戶端 要鏈接服務器 必須保證服務器已經啓動線程
要獲取狀態能夠採永輪詢(循環輪訓)的方法 可是浪費了CPU資源 並且可能會形成延遲 不能當即獲取狀態code
就能夠使用事件來完成狀態同步server
事件本質就是 一個標誌 能夠是False 或是True 對象
特殊之處在於 其包含一個wait函數 能夠阻塞當前線程 直到狀態從False變爲True進程
from threading import Thread,Event import time e = Event() #默認值爲false #啓動服務器任務 def start_server(): print('starting server....') #模擬啓動服務器的延遲 time.sleep(3) print('server started....') #將event事件的初始狀態由false轉爲true e.set() #鏈接服務器任務 def connect_server(): e.wait() #等待start事件的任務狀態從false變爲true if e.is_set(): print('服務器鏈接成功') #建立線程對象 t1 = Thread(target=start_server) t2 = Thread(target=connect_server) #啓動線程 t1.start() t2.start()