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. Google深度学习开源框架TenseorFlow安装

    Google近期发布了TensorFlow,考录到Google出品,必属精品,估计这玩意会火,不过火钳刘明已经来不及了 今天才想着安装来试试 TensorFlow官网:https://www.tens ...

  2. python学习-63 组合

    组合 1.什么是组合? 定义一个类,由数据属性构成,这几个属性又可以是通过一个类实例化的对象,这就是组合. 举例: class School: def __init__(self,name,addre ...

  3. 深度探索MySQL主从复制原理

    深度探索MySQL主从复制原理 一 .概要 MySQL Replication (MySQL 主从复制) 是什么? 为什么要主从复制以及它的实现原理是什么? 1.1 MySQL 主从复制概念 MySQ ...

  4. 【LEETCODE】54、数组分类,简单级别,题目:605、532

    数组类,简单级别完结.... 不容易啊,基本都是靠百度答案.... 希望做过之后后面可以自己复习,自己学会这个解法 package y2019.Algorithm.array; /** * @Proj ...

  5. PB 之多行标题报表

    第一种 1.添加一个text,将背景色选为非透明色:position中的layer,选为foreground,这样就可以拖动列宽了         2.在position属性标签页的width里,点右 ...

  6. [高清·非影印]Spring实战+SpringBoot实战+Spring微服务实战+SpringCloud微服务实战(全4本)

    ------ 郑重声明 --------- 资源来自网络,纯粹共享交流, 如果喜欢,请您务必支持正版!! --------------------------------------------- 下 ...

  7. JPA、Hibernate、Spring data jpa之间的关系,以及和springboot的整合

    什么么是JPA? 全称Java Persistence API,可以通过注解或者XML描述[对象-关系表]之间的映射关系,并将实体对象持久化到数据库中. 为我们提供了: 1)ORM映射元数据:JPA支 ...

  8. [C#] 匿名方法的方便和安全

    static void Main(string[] args) { int count = 5; //不安全写法 Task.Run(() => { Thread.Sleep(1000); Con ...

  9. Throw 和Throws 的区别

    throw语句用在方法体内,表示抛出异常,由方法体内的语句处理.throws语句用在方法声明后面,表示再抛出异常,由该方法的调用者来处理. 和在service中处理异常的方式差不多,并没有什么特别新奇 ...

  10. webpack-dev-server的使用

    1.安装 npm install webpack-dev-server --save-dev ps:为保证webpack-dev-server能正常运行,请确认在本地项目中下载了webpack的包,可 ...