python学习笔记——创建事件对象Event
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学习笔记之类与对象
这篇文章介绍有关 Python 类中一些常被大家忽略的知识点,帮助大家更全面的掌握 Python 中类的使用技巧 1.与类和对象相关的内置方法 issubclass(class, classinfo) ...
- python学习笔记4(对象/引用;多范式; 上下文管理器)
### Python的强大很大一部分原因在于,它提供有很多已经写好的,可以现成用的对象 21. 动态类型:对象/引用 对象和引用: 对象是储存在内存中的实体,对象名只是指向这一对象的引用(refere ...
- Python学习笔记总结(一)对象和流程语句总结
一.对象类型 1.数字 数字:不可变 2.字符串 字符串:不可原处修改[修改需要创建新的对象],有顺序,支持求长(len),合并(+),重复(*),索引S[0],分片(S[1:3]],成员测试(in) ...
- Python学习笔记——类和对象
类和对象 1. 一个例子 # 对象 = 属性 + 方法 # Python 中的类名称约定首字母大写,而 Python 函数名首字母小写 class Turtle: #属性 color = 'green ...
- python学习笔记8--面向对象--属性和方法详解
属性: 公有属性 (属于类,每个类一份) 普通属性 (属于对象,每个对象一份) 私有属性 (属于对象,跟普通属性相似,只是不能通过对象直接访问) 方法:(按作用) 构造方法 析构函数 方法: ...
- python学习笔记8--面向对象编程
一.面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一 ...
- Python学习笔记--2--面向对象编程
面向对象 类和装饰器@ #coding=gbk class student: def __init__(self,name,grand):#初始化构造函数,self相当于java中的this,相当于一 ...
- webdriver(python)学习笔记六——操作测试对象
定位到具体对象后,就需要对其进行操作,比如点击.输入内容等. 一般来说,webdriver中比较常用的操作对象的方法有下面几个 click 点击对象 send_keys 在对象上模拟按键输入 clea ...
- 学习笔记---Javascript事件Event、IE浏览器下的拖拽效果
学习笔记---Javascript事件Event.IE浏览器下的拖拽效果 1. 关于event常用属性有returnValue(是否允许事件处理继续进行, false为停止继续操作).srcE ...
随机推荐
- Nginx zabbix 的监控
Nginx zabbix 的监控 Nginx 配置 Nginx 必须包含:http_stub_status_module 模块 ./nginx -V |grep http_stub_status_mo ...
- linux下永久添加静态路由
在linux下永久添加静态路由有两种方法: 添加路由的命令: 1,route add route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0 ...
- android 地址控件概述
最近,公司做项目,需要一个地址控件,本来是想androidcopy开源的android的地址控件,但是了,找来找去.都没有找到一个真正满足我的需求的,普通的地址控件只是精确到市县区三级,但是我们的需求 ...
- Sql Server的弱口令入侵测试以及防范
我之所以要做这样的测试是因为这一切都是有背景的!!!被黑客黑的代价!!!伤心ing..... 背景: 测试: 物理机:Win7 虚拟机:xp 扫描工具(我想我最好不写扫描器的名字比较好): 密码之所以 ...
- 思维导图软件xmind和mindmanager哪个更好
思维导图是一种将放射性思考具体化的方法,可以将人们的创造性思维及时捕捉并呈现,目前便捷的网络为人们带来了众多的思维导图软件,而在这些软件中只有亲身实践体验过,才能知道到底思维导图哪个好,哪个又适合自己 ...
- 网站中超链接方式直接添加QQ好友
使用情景: 在图中点击图片,会弹出添加qq好友的窗口进行好友添加. 链接如下: tencent://AddContact/?fromId=45&fromSubId=1&subcmd=a ...
- 玩转Android Camera开发(四):预览界面四周暗中间亮,仅仅拍摄矩形区域图片(附完整源代码)
杂家前文曾写过一篇关于仅仅拍摄特定区域图片的demo.仅仅是比較简陋.在坐标的换算上不是非常严谨,并且没有完毕预览界面四周暗中间亮的效果,深以为憾.今天把这个补齐了. 在上代码之前首先交代下,这里面存 ...
- 解决Unable to load component class org.sonar.scanner.report.ActiveRulesPublisher/Unable to load component interface org.sonar.api.batch.rule.ActiveRules: NullPointerException
解决办法 Delete the directory data/es in your SonarQube installation. Restart SonarQube.
- CSS3实现两行或三行文字,然后多出的部分省略号代替
概述 -webkit-line-clamp 是一个 不规范的属性(unsupported WebKit property),它没有出现在 CSS 规范草案中.限制在一个块元素显示的文本的行数. 为了实 ...
- 基于LumiSoft.Net.dll发、收、删邮件
发邮件: using LumiSoft.Net.SMTP.Client; Mime m = new Mime(); MimeEntity mainEntity = m.MainEntity; // F ...