pythonl練習筆記——threading線程中的事件Event
阿新 • • 發佈:2018-04-17
detail 示例 lee rand als 線程間通信 python 清除 判斷
1 事件Event
使用方法:e = threading.Event()
Event對象主要用於線程間通信,確切地說是用於主線程控制其他線程的執行。
Event事件提供了三個方法:wait等待、clear清除信號False、set設置信號True。
Event事件實現通信機制:全局定義了一個“Flag”(默認為False),若Flag信號被clear為False,則執行event.wait方法時會阻塞;若Flag信號被set為True,則執行event.wait方法時便不阻塞。
Event事件對象提供了is_set()方法判斷內部信號Flag標誌狀態。
2 示例
import threadingimport random from time import sleep a = 500 e = threading.Event() def fun(): while True: sleep(2) e.wait() global a print(‘a=‘,a) a -= random.randint(0,100) t=threading.Thread(target=fun) t.start() while True: sleep(1) a += random.randint(0,10) ifa>100: e.set() else: e.clear() t.join()
運行
a= 503 a= 463 a= 457 a= 426
...
說明:
(1)Event的默認標誌為False,意味阻塞;
(2)Event置於線程對象中,可實現線程間通信,意味著一個線程的運行與否,與另外一個線程的通知信息有關。
(3)當一個線程因事件方法wait()而進入等待狀態時,另外一個線程Flag為False時,則該線程會一直處於阻塞狀態;直到另外一個進程通過set()方法將Flag標誌設置為True時,Event事件會通知該線程恢復運行。
關於線程Event事件的深層次理解,可參考:Python學習總結筆記(5)--進程/線程Event機制使用時要註意的一個問題
pythonl練習筆記——threading線程中的事件Event