python學習筆記——建立事件對象Event

1 Event對象的基本概述

用 multiprocessing.Event 實現線程間通訊,使用multiprocessing.Event能夠使一個線程等待其餘線程的通知,咱們把這個Event傳遞到線程對象中;主要用於主線程控制其餘線程的執行,事件主要提供了三個方法:wait、clear、set。html

 

事件處理的機制:python

全局定義了一個Flag;編程

若是Flag值爲False(clear:將Flag設置爲False),則執行event.wait方法時阻塞;url

若是Flag值爲True(set:將Flag設置爲True),則執行event.wait方法時不阻塞。spa

注:.net

event對象默認爲False,即遇到event對象在等待就阻塞線程的執行。線程

2 信號操做的三種方法

2.1 設置信號

使用Event的set()方法可設置Event對象內部的信號標誌爲True。code

Event對象提供了is_set()方法來判斷其內部信號標誌的狀態,當使用Event對象的set()方法後,is_set()方法返回真。htm

2.2 清除信號

使用Event對象的clear()方法可清除Event對象內部的信號標誌,即將其設置爲False,is_set()方法返回假對象

2.3 等待

Event對象wait的方法只有在內部信號爲真時纔會很快執行並完成返回。當Event對象的內部信號標誌爲假時,則wait方法一直等待直到其爲真時才返回。

3 示例

3.1 is_set() 查看對象是否被設置

from multiprocessing import Event # 建立事件對象
e = Event() # 查看對象是否被設置
print(e.is_set())

運行:False;說明爲默認阻塞的。

因默認爲False,此時運行wait時會被阻塞,例如

from multiprocessing import Event # 建立事件對象
e = Event() # 查看對象是否被設置
print(e.is_set()) e.wait() print('wait.........')

運行,打印出False以後,一直在阻塞中...

3.2 set()將默認設置爲True

from multiprocessing import Event # 建立事件對象
e = Event() # 查看對象是否被設置
print(e.is_set()) #對事件進行設置,將Event事件設置爲True
e.set() e.wait() # set能夠衝破阻塞,wait...能夠打印出來
print('wait...')

運行

False wait...

 

wait(time)中的time參數能夠設置時間,當超過time時間後便可阻斷阻塞。例如

from multiprocessing import Event # 建立事件對象
e = Event() # 查看對象是否被設置
print(e.is_set()) e.wait(3) print('wait...')

運行

False wait...

備註:當超出阻塞時間3秒後,print('wait....')能夠被打印出來

 

3.3 綜合應用

from multiprocessing import Event,Process import time def wait_event(): print("wait for event setting") e.wait() print("wait for event 1:",e.is_set()) def wait_event_timeout(): print('wait for event setting or time out') e.wait(2) print("wait for event 2:",e.is_set()) e = Event() p1 = Process(name="block",target= wait_event) p1.start() p2 = Process(name="non-block",target= wait_event_timeout) p2.start() print("main: setting the event") time.sleep(3) e.set() print('event is set')

運行

main: setting the event wait for event setting or time out wait for event setting wait for event 2: False event is set wait for event 1: True

 

參考:

Python編程之event對象的用法實例分析

python基礎之Event對象、隊列和多進程基礎

Python線程event

相關文章
相關標籤/搜索