# 阻塞事件 :

e = Event()生成事件对象e

e.wait()是给程序加阻塞 , 程序当中是否加阻塞完全取决于该对象中的is_set() [默认返回值是False]

e.wait(2) 传参,相当于time.sleep(2)

# 如果是True 那就不加阻塞

# 如果是False 就加阻塞

# 控制这个属性的值

# set()方法 将这个属性的值改成True

# clear()方法 将这个属性的值改成False

# is_set()方法 判断当前的属性是否为True (默认上来是False)

例:模拟红绿灯,假设有20辆小车全部通过后,红绿灯终止;

from multiprocessing import Process, Event
import time, random
def traffic_light(e):
# traffic_light 只做一件事就是红灯和绿灯的变色效果
print("红灯亮")
while True:
# 默认is_set 获取到的值是False
if e.is_set():
# 红灯区间
time.sleep(1)
print("红灯亮")
e.clear() # False
else:
# 绿灯区间
time.sleep(1)
print("绿灯亮")
e.set() # True def car(e, i):
# e.is_set() 为False时成立
if not e.is_set():
print("car %s 在等待" % (i))
e.wait()
print("car %s 通过了" % i) if __name__ == "__main__":
e = Event()
lst = []
p = Process(target=traffic_light, args=(e,))
p.daemon = True
p.start() for i in range(20):
time.sleep(random.randrange(0, 2))
p = Process(target=car, args=(e, i))
p.start()
lst.append(p)
for p in lst:
p.join() print("程序彻底跑完~")

执行结果: 如果想车辆跑完了,红绿灯继续运行,去掉守护进程和末尾的阻塞就可以了

红灯亮
绿灯亮
car 0 通过了
car 1 通过了
红灯亮
car 3 在等待
car 2 在等待
car 4 在等待
car 5 在等待
car 6 在等待
绿灯亮
car 4 通过了
car 3 通过了
car 2 通过了
car 5 通过了
car 6 通过了
car 7 通过了
car 9 通过了
car 8 通过了
car 10 通过了
红灯亮
car 11 在等待
绿灯亮
car 11 通过了
car 13 通过了
car 12 通过了
car 14 通过了
红灯亮
car 15 在等待
绿灯亮
car 15 通过了
car 17 通过了
car 16 通过了
car 18 通过了
红灯亮
car 19 在等待
绿灯亮
car 19 通过了
程序彻底跑完~ Process finished with exit code 0

(6)进程---Event事件的更多相关文章

  1. Event事件、进程池与线程池、协程

    目录 Event事件 进程池与线程池 多线程爬取梨视频 协程 协程目的 gevent TCP服务端socket套接字实现协程 Event事件 用来控制线程的执行 出现e.wait(),就会把这个线程设 ...

  2. GIL与普通互斥锁区别,死锁现象,信号量,event事件,进程池与线程池,协程

    GIL与普通互斥锁区别 GIL锁和互斥锁的异同点 相同: 都是为了解决解释器中多个线程资源竞争的问题 异: 1.互斥锁是Python代码层面的锁,解决Python程序中多线程共享资源的问题(线程数据共 ...

  3. (14)线程- Event事件和守护线程Daemon

    <一>Event事件 线程Event基本和进程的Event语法是一样的 # wait() 动态给程序加阻塞 # set() 将内部属性改成True # clear() 将内部属性改成Fal ...

  4. 1.gil全局解释器锁, 2. 死锁与递归锁 3. 信号量 4. Event事件 5. 线程queue

    gil本质就是一把互斥锁,相当于执行权限,每个进程都会存在一把gil,同一进程内的多个线程必须抢到gil 之后才能使用cpython解释器来执行自己的代码,同一进程下的多线程不能并行,但可以实现并发 ...

  5. Python 36 死锁现象和递归锁、信号量、Event事件、线程queue

    一:死锁现象和递归锁 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远 ...

  6. 并发编程--一堆锁,GIL,同步异步,Event事件

    目录 一堆锁 死锁现象(*****) 递归锁 RLock (了解) 信号量 (了解) GIL(*****) 什么时GIL锁 为什么需要GIL锁 Cpython解释器与GC的问题 GIL锁带来的问题 多 ...

  7. GIL全局解释锁,死锁,信号量,event事件,线程queue,TCP服务端实现并发

    一.GIL全局解释锁 在Cpython解释器才有GIL的概念,不是python的特点 在Cpython解释器中,同一个进程下开启的多线程,同一时刻只能有一个线程执行,无法利用多核优势. 1.GIL介绍 ...

  8. GIL 信号量 event事件 线程queue

    GIL全局解释器锁 官方解释: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple n ...

  9. Event事件与协程

    1.Event事件 Event事件的作用: - 用来控制线程的执行. - 由一些线程去控制另一些线程. 2.进程池与线程池 1)什么是进程池与线程池? 进程池与线程池是用来控制当前程序允许创建(进程/ ...

随机推荐

  1. get与post需要注意的几点 (转)

    get与post需要注意的几点 在面试或者笔试时,经常会被问到 HTTP 方法中 get 和 post 的异同点.本文简单整理归纳了一下,以备忘. 1."get/post" VS ...

  2. Microsoft Visual Studio 2010(vs10)安装与使用

    安装1.下载软件: 云盘分享http://pan.baidu.com/s/1i4JL9GT 2.安装 打开Microsoft Visual Studio 2010目录,双击setup.exe ,运行 ...

  3. Codeforces 834D The Bakery - 动态规划 - 线段树

    Some time ago Slastyona the Sweetmaid decided to open her own bakery! She bought required ingredient ...

  4. Codeforces 235C Cyclical Quest - 后缀自动机

    Some days ago, WJMZBMR learned how to answer the query "how many times does a string x occur in ...

  5. 【Python52--爬虫1】

    一.Python如何访问互联网 采用urllib包来访问 二.理论 1.请问URL是“统一资源标识符”还是“统一资源定位符” URI是统一资源标识符,URL是统一资源定位符.即:URI是用字符串表示某 ...

  6. ZOJ 4027 Sequence Swapping(DP)题解

    题意:一串括号,每个括号代表一个值,当有相邻括号组成()时,可以交换他们两个并得到他们值的乘积,问你最大能得到多少 思路:DP题,注定想得掉头发. 显然一个左括号( 的最远交换距离由他右边的左括号的最 ...

  7. R语言 apply,sapply,lapply,tapply,vapply, mapply的用法

    apply() apply(m,dimcode,f,fargs) m 是一个矩阵. dimcode是维度编号,取1则为对行应用函数,取2则为对列运用函数. f是函数 fargs是f的可选参数集 > ...

  8. 今天的任务--git练习

    克隆远程仓库项目 从版本控制中选择git 填写地址和本地目录,test测试成功后点击clone 克隆完成回到主界面,点击open打开刚才克隆的项目 git操作 添加文件py1.html 打开命令行 新 ...

  9. map数据结构

    学习map的这种ES6新加的数据结构.在一些构建工具中是非常喜欢使用map这种数据结构来进行配置的,因为map是一种灵活,简单的适合一对一查找的数据结构.我们知道的数据结构,已经有了json和set. ...

  10. Python 安装与环境变量配置

    一.软件下载 Python安装包下载地址:https://www.python.org/ 二.安装过程(略) 三.环境变量配置: 方法一:使用cmd命令添加path环境变量 在cmd下输入: path ...