python学习笔记——创建事件对象Event
2018-04-02 23:50
387 查看
1 Event对象的基本概述
用 multiprocessing.Event 实现线程间通信,使用multiprocessing.Event可以使一个线程等待其他线程的通知,我们把这个Event传递到线程对象中;主要用于主线程控制其他线程的执行,事件主要提供了三个方法:wait、clear、set。事件处理的机制:
全局定义了一个Flag;
如果Flag值为False(clear:将Flag设置为False),则执行event.wait方法时阻塞;
如果Flag值为True(set:将Flag设置为True),则执行event.wait方法时不阻塞。
注:
event对象默认为False,即遇到event对象在等待就阻塞线程的执行。
2 信号操作的三种方法
2.1 设置信号
使用Event的set()方法可设置Event对象内部的信号标志为True。Event对象提供了is_set()方法来判断其内部信号标志的状态,当使用Event对象的set()方法后,is_set()方法返回真。
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
相关文章推荐
- python学习笔记--event事件
- python cookbook第三版学习笔记十二:类和对象(三)创建新的类或实例属性
- 韩顺平 javascript教学视频_学习笔记27_dom对象(window对象3.history.location.navigator.screen.event)_js事件驱动编程
- js中的event事件对象兼容型写法及事件流学习笔记
- python学习笔记2-强大的动态创建
- 微软企业库4.1学习笔记(二)各功能之间的依赖关系以及对象创建
- effective-java学习笔记(2)避免在程序中创建重复的对象
- 微软企业库4.1学习笔记(七)创建对象 续集1
- Python学习笔记之一 文本文件的创建与显示
- 微软企业库4.1学习笔记(六)创建对象
- 微软企业库4.1学习笔记(八)创建对象 续集2
- 微软企业库5.0学习笔记(六)创建并引用企业库对象
- Spring通过容器获取配置对象及事件注入(学习笔记二)
- 学习笔记---Javascript事件Event、IE浏览器下的拖拽效果
- 学习笔记---页面对象的11个事件, 其中InitComplete-PreLoad之间和Load-LoadComplete之间的时间点, 很关键
- 微软企业库4.1学习笔记(五)对象创建和依赖注入方法
- Python学习笔记九:列表(1)--列表元素介绍及创建方法
- 微软企业库4.1学习笔记(六)创建对象
- 微软企业库4.1学习笔记(七)创建对象 续集1
- 反射学习笔记之动态创建对象和调用方法