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的更多相关文章

  1. Python学习笔记之类与对象

    这篇文章介绍有关 Python 类中一些常被大家忽略的知识点,帮助大家更全面的掌握 Python 中类的使用技巧 1.与类和对象相关的内置方法 issubclass(class, classinfo) ...

  2. python学习笔记4(对象/引用;多范式; 上下文管理器)

    ### Python的强大很大一部分原因在于,它提供有很多已经写好的,可以现成用的对象 21. 动态类型:对象/引用 对象和引用: 对象是储存在内存中的实体,对象名只是指向这一对象的引用(refere ...

  3. Python学习笔记总结(一)对象和流程语句总结

    一.对象类型 1.数字 数字:不可变 2.字符串 字符串:不可原处修改[修改需要创建新的对象],有顺序,支持求长(len),合并(+),重复(*),索引S[0],分片(S[1:3]],成员测试(in) ...

  4. Python学习笔记——类和对象

    类和对象 1. 一个例子 # 对象 = 属性 + 方法 # Python 中的类名称约定首字母大写,而 Python 函数名首字母小写 class Turtle: #属性 color = 'green ...

  5. python学习笔记8--面向对象--属性和方法详解

    属性: 公有属性  (属于类,每个类一份) 普通属性  (属于对象,每个对象一份) 私有属性    (属于对象,跟普通属性相似,只是不能通过对象直接访问) 方法:(按作用) 构造方法 析构函数 方法: ...

  6. python学习笔记8--面向对象编程

    一.面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一 ...

  7. Python学习笔记--2--面向对象编程

    面向对象 类和装饰器@ #coding=gbk class student: def __init__(self,name,grand):#初始化构造函数,self相当于java中的this,相当于一 ...

  8. webdriver(python)学习笔记六——操作测试对象

    定位到具体对象后,就需要对其进行操作,比如点击.输入内容等. 一般来说,webdriver中比较常用的操作对象的方法有下面几个 click 点击对象 send_keys 在对象上模拟按键输入 clea ...

  9. 学习笔记---Javascript事件Event、IE浏览器下的拖拽效果

    学习笔记---Javascript事件Event.IE浏览器下的拖拽效果     1. 关于event常用属性有returnValue(是否允许事件处理继续进行, false为停止继续操作).srcE ...

随机推荐

  1. Mybatis映射实体改造和异常问题

    现在WEB开发经常使用 Mybatis 作为持久化框架,在开发过程中,会在Java代码中构建实体类与数据库表字段相互映射, 下面提出一个关于映射实体优化的方案:通过链式编程实现给实例对象赋值. 参考代 ...

  2. STL sort 函数实现详解 ZZ

    前几天阿里电话一面,被问到STL中sort函数的实现.以前没有仔细探究过,听人说是快速排序,于是回答说用快速排序实现的,但听电话另一端面试官的声音,感觉不对劲,知道自己回答错了.这几天特意看了一下,在 ...

  3. 关于ListView中getView被重复调用的问题

    我用ListView显示数据时,自定义了一个适配器(extends ArrayAdapter),然后重写了getView方法,现在出现一个问题,就是这个getView()方法被重复调用了,比如我的_d ...

  4. NYOJ-61 传纸条(一)

    传纸条(一) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5   描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行 ...

  5. tcp协议的端口状态

    Listening Syn_sent syn_rcvd established close_wait time_wait --------- 对方主动关闭(对方调用close()), 我方的状态变为 ...

  6. [Javascript] Closure Cove, Common mistake

    They’ve got a problem with their existing code, which tries to use a closure. Check it out: function ...

  7. [Javascript] Using map() function instead of for loop

    As an example, if Jason was riding the roller coaster (and when isn’t he), your goal would be to cha ...

  8. 为什么好多人说win8不好用?

    2012年8月就開始接触win8了,那时win8已经出来半年了:自从用了win8之后就感觉他比xp.win7桌面更绚丽.我就喜欢绚丽的桌面.至今使用win8已经两年了,可发现身边好多人都说win8不好 ...

  9. C#.NET常见问题(FAQ)-如何清空stringbuilder

    就红色的代码可以: System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.Append("hello" ...

  10. Python编程 - json字符串的解析

    import json jsonString = '{"arrayOfNums":[{"number":0},{"number":1},{& ...