python threading.Event

線程同步的方式 (保證線程安全)

  1. 互斥量(鎖): 通過互斥機制防止多個線程同時訪問公共資源
  2. 信號量(semaphore): 控制同一時刻多個線程訪問同一個資源的線程數
  3. 事件(signal): 通過通知的方式保持多個線程同步
事件(信號)

Event是最簡單的線程間通信機制,一個線程負責給事件發信號,其他線程等待事件。
Event類內部有一個flag標識,初始值爲False。
Event類常用的三個方法有:set、clear、wait。set方法會將flag標識置爲True,
所有處於等待的線程將會被喚醒;clear方法會將flag重置爲False,wait方法將阻塞線程,除非flag標識被置爲True。

import threading
import time

ev=threading.Event()

def func():
    print('%s waits event...' % threading.currentThread().getName())
    ev.wait()
    print('%s receives event...' % threading.currentThread().getName())


if __name__ == '__main__':
    t1=threading.Thread(target=func,args=())
    t2=threading.Thread(target=func,args=())

    t1.start()
    t2.start()

    time.sleep(5) #主線程休眠5秒

    print('main thread sets event...')
    ev.set() #主線程設置事件

result:

Thread-1 waits event...
Thread-2 waits event...
main thread sets event...
Thread-1 receives event...
Thread-2 receives event...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章