(6)进程---Event事件
# 阻塞事件 :
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事件的更多相关文章
- Event事件、进程池与线程池、协程
目录 Event事件 进程池与线程池 多线程爬取梨视频 协程 协程目的 gevent TCP服务端socket套接字实现协程 Event事件 用来控制线程的执行 出现e.wait(),就会把这个线程设 ...
- GIL与普通互斥锁区别,死锁现象,信号量,event事件,进程池与线程池,协程
GIL与普通互斥锁区别 GIL锁和互斥锁的异同点 相同: 都是为了解决解释器中多个线程资源竞争的问题 异: 1.互斥锁是Python代码层面的锁,解决Python程序中多线程共享资源的问题(线程数据共 ...
- (14)线程- Event事件和守护线程Daemon
<一>Event事件 线程Event基本和进程的Event语法是一样的 # wait() 动态给程序加阻塞 # set() 将内部属性改成True # clear() 将内部属性改成Fal ...
- 1.gil全局解释器锁, 2. 死锁与递归锁 3. 信号量 4. Event事件 5. 线程queue
gil本质就是一把互斥锁,相当于执行权限,每个进程都会存在一把gil,同一进程内的多个线程必须抢到gil 之后才能使用cpython解释器来执行自己的代码,同一进程下的多线程不能并行,但可以实现并发 ...
- Python 36 死锁现象和递归锁、信号量、Event事件、线程queue
一:死锁现象和递归锁 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远 ...
- 并发编程--一堆锁,GIL,同步异步,Event事件
目录 一堆锁 死锁现象(*****) 递归锁 RLock (了解) 信号量 (了解) GIL(*****) 什么时GIL锁 为什么需要GIL锁 Cpython解释器与GC的问题 GIL锁带来的问题 多 ...
- GIL全局解释锁,死锁,信号量,event事件,线程queue,TCP服务端实现并发
一.GIL全局解释锁 在Cpython解释器才有GIL的概念,不是python的特点 在Cpython解释器中,同一个进程下开启的多线程,同一时刻只能有一个线程执行,无法利用多核优势. 1.GIL介绍 ...
- GIL 信号量 event事件 线程queue
GIL全局解释器锁 官方解释: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple n ...
- Event事件与协程
1.Event事件 Event事件的作用: - 用来控制线程的执行. - 由一些线程去控制另一些线程. 2.进程池与线程池 1)什么是进程池与线程池? 进程池与线程池是用来控制当前程序允许创建(进程/ ...
随机推荐
- linux系统日常维护常用命令
环境: OS:Red Hat Linux As 5 1.find 11.查找当前目录以及子目录下包含ORA字符的文件 find . -type f|xargs grep "ORA&qu ...
- windows2012R2标准版升级到数据中心版,不用重装系统
windows2012R2标准版升级到数据中心版,不用重装系统 Windows Server 2012 R2是微软的服务器系统,是 Windows Server 2012 的升级版本. Windows ...
- [WARNING]: Could not match supplied host pattern, ignoring: servers
Centos7.5 ansible执行命令报错 问题: [root@m01 ~]# ansible servers -a "hostname" [WARNING]: provide ...
- uniGUI试用笔记(十一)
最近研究了一下UniGUI的TuniDBGrid,记录一下免得忘记了. TuniDBGrid的重要属性包括: 1.列—TUniDBGridColumns和TUniDBGridColumn 每个列对象( ...
- Docker 命令收集
Docker 命令收集 1.删除所有容器 docker rm $(docker ps -a -q) 2.删除所有镜像 docker rmi $(docker images -q) 3.启动镜像 doc ...
- js字符串方法、数组方法整理
push 向数组末尾添加一项 返回值为数组的长度: pop 删除数组最后一项: unshift 向数组开头增加一项: shift 删除数组第一项: splice 删除数组中的值:1 splice(n, ...
- Async、Await
Async.Await:net4.x新增的异步编程方式: 目的:为了简化异步程序编写 Async方式, 使用Async标记Async1为异步方法, 用Await标记GetRequestStreamAs ...
- NOI1999 生日蛋糕
#include<iostream> #include<cstdio> #include<cmath> using namespace std; #define I ...
- 【Django】【环境配置】Mac
mysql环境配置:http://www.cnblogs.com/chenmo-xpw/p/6102933.html
- 同上两篇 这篇是关于shader的
资源加载性能测试代码 与上篇所提出的测试代码一样,我们对于Shader资源的加载性能分析同样使用该测试代码.同时,我们将Shader文件制作成一定大小的AssetBundle文件,并逐一通过以下代码在 ...