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. 第2章 排序 | 第10节 计数排序练习题 && 基数排序

    对于一个int数组,请编写一个计数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] 计数排序 ...

  2. SQL Server中的database checkpoint

    基于性能方面的考虑, 数据库引擎会在内存(buffer cache)中执行数据库数据页(pages)的修改, 不会再每次做完修改之后都把修改了的page写回到磁盘上. 更准确的说, 数据库引擎定期在每 ...

  3. IOS UITableView多选删除功能

    UITbableView作为列表展示信息,除了展示的功能,有时还会用到删除,比如购物车.收藏列表等. 单行删除功能可以直接使用系统自带的删除功能,当横向轻扫cell时,右侧出现红色的删除按钮,点击删除 ...

  4. 即时通讯之smack客户端配置

    之前学习了通过Openfire+spark+smack的模式来完成我们的即时通讯软件,上次我们已经完成了Openfire的安装和配置,这次我们继续完成我们的客户端部分. 1.首先我们通过百度smack ...

  5. IOS Key-Value Observing (KVO)

    kvo,与观察者模式类似,通过给指定的对象设置观察者,来检测对象的变化,当指定的对象的属性被修改后,用于作为观察者的对象会接收到通知.简单的说就是每次指定的被观察的对象的属性被修改后,kvo就会自动通 ...

  6. python 读写CSV文件

    #-*- coding: UTF-8 -*- import csv import os def WriteToCsv(): '''写CSV文件''' titls = ['序号', '链接', '备注' ...

  7. TJ Holowaychuk是怎样学习编程的?

    TJ Holowaychuk是怎样学习编程的? 学习了:https://blog.csdn.net/wozaixiaoximen/article/details/49507111 Q:TJ Holow ...

  8. uva 213 - Message Decoding (我认为我的方法要比书上少非常多代码,不保证好……)

    #include<stdio.h> #include<math.h> #include<string.h> char s[250]; char a[10][250] ...

  9. python下载文件的三种方法

    Python开发中时长遇到要下载文件的情况,最常用的方法就是通过Http利用urllib或者urllib2模块. 当然你也可以利用ftplib从ftp站点下载文件.此外Python还提供了另外一种方法 ...

  10. mac 下vim 配置文件

    " Configuration file for vim set modelines=0 " CVE-2007-2438 " Normally we use vim-ex ...