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

相关文章
相关标签/搜索