1.事件

  :通过一个信号来控制多个进程同时执行或者阻塞。

    一个信号可以使所有的进程都进入阻塞状态,也可以控制所有的进程接触阻塞,一个事件被创建之后,默认是阻塞状态。

from multiprocessing import Event

e = Event() #创建事件对象
print(e.is_set()) #查看一个事件的状态:默认是阻塞即False
print(11111)
e.wait() #依据事件状态,来觉得是否阻塞
print(22222)

结果:

2.解除阻塞:

from multiprocessing import Event

e = Event() #创建事件对象
print(e.is_set()) #查看一个事件的状态:默认是阻塞即False
print(11111)
e.set() #将事件的状态设置为True
print(e.is_set())
e.wait() #依据事件状态,来觉得是否阻塞
print(22222)

结果:

3.设置阻塞:

from multiprocessing import Event

e = Event() #创建事件对象
print(e.is_set()) #查看一个事件的状态:默认是阻塞即False
print(11111)
e.set() #将事件的状态设置为True
print(e.is_set())
e.wait() #依据事件状态,来觉得是否阻塞
print(22222)
e.clear() #将事件的状态改为False
e.wait()
print(e.is_set())
print(33333)

结果:

应用:

from multiprocessing import Process
from multiprocessing import Event
import time
import random class Car(Process):
def __init__(self,e,i):
super().__init__()
self.e = e
self.i = i
def run(self):
if not self.e.is_set():
print('{}在等红灯'.format(self.i))
self.e.wait() #阻塞,直到事件状态改变
print('{}车通行'.format(self.i)) class MyProcess(Process):
def __init__(self,e):
super().__init__()
self.e = e def run(self):
while True:
if self.e.is_set():
self.e.clear()
print('红灯')
else:
self.e.set()
print('绿灯')
time.sleep(2) if __name__ == '__main__':
e = Event()
q1 = MyProcess(e)
q1.start()
for i in range(20):
q2 = Car(e,i)
q2.start()
time.sleep(random.random()) #随机暂停时间(0-1秒之间)

结果:

python_并发编程——事件的更多相关文章

  1. Python并发编程-事件,红绿灯控制

    事件用来控制多个进程同时执行或者阻塞 set和clear 分别用来修改一个事件的状态,True或者False is_set 用来查看一个事件的状态 wait 是依据事件的状态来决定自己是否在wait处 ...

  2. python_并发编程——进程池

    1.进程池 from multiprocessing import Pool def func(n): for i in range(10): print(n+1) if __name__ == '_ ...

  3. python_并发编程——数据共享

    1.数据共享 实现进程之间的数据共享 from multiprocessing import Manager,Process class MyPro(Process): def __init__(se ...

  4. python_并发编程——管道

    1.管道 from multiprocessing import Pipe conn1,conn2 = Pipe() #返回两个值 conn1.send('wdc') #发送 print(conn2. ...

  5. python_并发编程——消费者和生产者模型

    消费者和生产者模型 from multiprocessing import Process,Queue import time import random class Producer(Process ...

  6. python_并发编程——队列

    1.队列 from multiprocessing import Queue q = Queue(5) #创建队列对象,队列大小为5,队列中只能存放5个元素 q.put(1) #往队列中添加元素 q. ...

  7. python_并发编程——锁

    多进程模拟买票~ import time import json from multiprocessing import Process class Show(Process): #查 def run ...

  8. python_并发编程——守护进程

    1.守护进程 守护进程会随着主进程的代码执行结束而结束. 语法:进程对象.daemon = True时,表示将进程设置为守护进程,一定在start之前设置. import time from mult ...

  9. python_并发编程——多进程的第二种启动方式

    1.多进程的第二种启动方式 import os from multiprocessing import Process # 创建一个自定义类,继承Process类 class MyProcess(Pr ...

随机推荐

  1. android基础---->Toast的使用

    简要说明 Toast是一种没有交点,显示时间有限,不能与用户进行交互,用于显示提示信息的显示机制,我们可以把它叫做提示框.Toast不依赖 于Activity,也就是说,没有Activity,依然可以 ...

  2. php_mvc实现步骤五

    5.match_controller 控制器层典型实现 控制器类 依据功能的相关性,将一系列相关的功能,使用一个控制器类来处理,而该控制器的每个方法,就对因某个功能. 注意:控制器是按照功能划分的.( ...

  3. React路由传参的三种方式

    方式 一:          通过params         1.路由表中                     <Route path=' /sort/:id '   component= ...

  4. hdu 2962 题解

    题目 题意 给出一张图,每条道路有限高,给出车子的起点,终点,最高高度,问在保证高度尽可能高的情况下的最短路,如果不存在输出 $ cannot  reach  destination $ 跟前面 $ ...

  5. dubbo线程池的拒绝策略

    jdk自带的原生的拒绝策略抛出的异常信息不够详细,而dubbo对拒绝策略进行了改写,抛出的信息更具有参考价值,值得我们借鉴. jdk自带的原生拒绝策略抛出的信息: // ThreadPoolExecu ...

  6. 同一个Tomcat部署多个springboot项目问题

    2018-12-13 10:37:21,412 ERROR [localhost-startStop-2] c.a.d.s.DruidDataSourceStatManager [DruidDataS ...

  7. JavaTCP粘包、拆包

    import java.nio.ByteBuffer; import io.netty.bootstrap.ServerBootstrap; import io.netty.buffer.ByteBu ...

  8. Bootstrap-table 使用总结,和其参数说明

    转载于:https://www.cnblogs.com/laowangc/p/8875526.html 一.什么是Bootstrap-table? 在业务系统开发中,对表格记录的查询.分页.排序等处理 ...

  9. docker 执行 docker system prune 导致Azure Devops build镜像失败

    运行docker的centos上, 只分配了16G的空间, 装了个mysql, 还有个rancher, 就只剩下2G的空间了, Azure Devops build镜像就出错了, 显示存储空间不足, ...

  10. Java Web 深入分析(11) JVM(1)

    前言 Java启动后作为一个进程运行在操作系统中,该进程要分配的内存有以下几个: 1.Java堆: 存储java内存区域,堆大小是在jvm启动时就像操作系统申请完成,其中 -Xmx和-Xms 分别表示 ...