python_并发编程——事件
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_并发编程——事件的更多相关文章
- Python并发编程-事件,红绿灯控制
事件用来控制多个进程同时执行或者阻塞 set和clear 分别用来修改一个事件的状态,True或者False is_set 用来查看一个事件的状态 wait 是依据事件的状态来决定自己是否在wait处 ...
- python_并发编程——进程池
1.进程池 from multiprocessing import Pool def func(n): for i in range(10): print(n+1) if __name__ == '_ ...
- python_并发编程——数据共享
1.数据共享 实现进程之间的数据共享 from multiprocessing import Manager,Process class MyPro(Process): def __init__(se ...
- python_并发编程——管道
1.管道 from multiprocessing import Pipe conn1,conn2 = Pipe() #返回两个值 conn1.send('wdc') #发送 print(conn2. ...
- python_并发编程——消费者和生产者模型
消费者和生产者模型 from multiprocessing import Process,Queue import time import random class Producer(Process ...
- python_并发编程——队列
1.队列 from multiprocessing import Queue q = Queue(5) #创建队列对象,队列大小为5,队列中只能存放5个元素 q.put(1) #往队列中添加元素 q. ...
- python_并发编程——锁
多进程模拟买票~ import time import json from multiprocessing import Process class Show(Process): #查 def run ...
- python_并发编程——守护进程
1.守护进程 守护进程会随着主进程的代码执行结束而结束. 语法:进程对象.daemon = True时,表示将进程设置为守护进程,一定在start之前设置. import time from mult ...
- python_并发编程——多进程的第二种启动方式
1.多进程的第二种启动方式 import os from multiprocessing import Process # 创建一个自定义类,继承Process类 class MyProcess(Pr ...
随机推荐
- Java程序运行机制
Java程序运行机制 编译型(compile) 它有一个负责翻译的程序(编译器),将我们写的 Java 源代码转为计算机可执行的代码 举个例子:把一本中文书翻译成英文书 应用:操作系统.C.C++ 解 ...
- linux awk的用法
linux awk的用法 <pre>[root@iZ23uewresmZ ~]# cat /home/ceshis.txtb 12 42 30 b 03 43 25 a 08 10 16 ...
- 【vim小小记】vim的复制粘贴(包括系统剪贴板)
1.vim常用复制粘贴命令 Vim的复制粘贴命令无疑是y (yank),p(paster),加上yy,P PS: vim有个很有意思的约定(我觉得是一种约定),就是某个命令的大小写都是实现某种功能,只 ...
- Jetson TX2
NVIDIA Jetson TX2作为一个嵌入式平台的深度学习端,具备不错的GPU性能,可以发现TX2的GPU的计算能力是6.2.这意味着TX2对半精度运算有着良好的支持,因此,完全可以在桌面端训练好 ...
- linux安装go开发环境
1下载go wget https://studygolang.com/dl/golang/go1.12.7.linux-amd64.tar.gz执行此命令会将go1.12.7.linux-amd64. ...
- java之hibernate之基于外键的双向一对一关联映射
这篇讲解 基于外键的双向一对一关联映射 1.考察如下信息,人和身份证之间是一个一对一的关系.表的设计 2.类结构 Person.java public class Person implements ...
- 5_PHP数组_3_数组处理函数及其应用_8_数组与数据结构
以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. 数组与数据结构 1. array_push() 函数 程序: <?php $stack = array(&q ...
- Ubuntu 18.04 LTS版本 谷歌拼音输入法安装
为何安装? 自带IBUS框架对中文支持不稳定 采用对中文支持稳定的fcitx框架 如何安装? 步骤如下: 卸载自带IBUS框架 命令:sudo remove ibus 安装fcitx框架 ...
- flex 布局学习
flex 布局学习 寻根溯源话布局 一切都始于这样一个问题:怎样通过 CSS 简单而优雅的实现水平.垂直同时居中.记得刚开始学习 CSS 的时候,看到 float 属性不由得感觉眼前一亮,顺理成章的联 ...
- JavaScript_day02
10.随机数 随机数一般和数组组合使用. 生成随机数:使用Math.random()函数,生成的随机数0-1.一般乘以10^n扩大随机数范围. Math.round()函数和parseInt()函数. ...