1. 程式人生 > >pythonl練習筆記——threading線程中的事件Event

pythonl練習筆記——threading線程中的事件Event

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 threading
import 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) if
a>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