Event事件

07.07自我總結

Event事件

一.導入模塊

from threading import Eventpython

二.概念

線程間狀態同步:即將一個任務丟到子進程中,這個任務將異步執行,如何獲取到這個任務的執行狀態服務器

注意:執行狀態和執行結果不是同一個概念,異步回調拿到的是任務的執行結果異步

假設函數

一個線程 負責啓動服務器 啓動服務器須要花必定的時間操作系統

另外一個線程做爲客戶端 要鏈接服務器 必須保證服務器已經啓動線程

要獲取狀態能夠採永輪詢(循環輪訓)的方法 可是浪費了CPU資源 並且可能會形成延遲 不能當即獲取狀態code

就能夠使用事件來完成狀態同步server

事件本質就是 一個標誌 能夠是False 或是True 對象

特殊之處在於 其包含一個wait函數 能夠阻塞當前線程 直到狀態從False變爲True進程

三.Event對象的方法

  • event.isSet():返回event的狀態值
  • event.wait():將阻塞線程;知道event的狀態爲True,會執行下去
  • event.set(): 設置event的狀態值爲True,全部阻塞池的線程激活進入就緒狀態, 等待操做系統調度
  • event.clear():恢復event的狀態值爲False。

四.簡單應用

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()
相關文章
相關標籤/搜索