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 ...
随机推荐
- C#中标准的IDispose模式
C#实现IDispose接口 .net的GC机制有两个问题:首先GC并不能释放所有资源,它更不能释放非托管资源.其次,GC也不是实时的,所有GC存在不确定性.为了解决这个问题donet提供了析构函 ...
- lay-verify进行非必填项校验
它默认都验证了! 需要调整源码!form.js,layui.all.js this.config = { verify: { required: [/[\S]+/, "必填项不能为空&quo ...
- win10+aconda+pytorch
1.需要建立项目的运行环境,每个项目应用的框架不用,所以对于每个项目分别用运行环境不会造成管理上的混乱以及应用上的冲突 2.建立项目运行环境: a.用管理员身份运行anconda prompt 创建c ...
- configparser 文件加字典操作
import configparser conf=configparser.ConfigParser() #創建一個對象 # f=open('db.ini','w') conf['DEFAULT'] ...
- while 语句的逻辑
# i =3# username = '大天天'# password = 123# while i > 0:# name = input('请输入你的名字:')# i -= 1# if name ...
- 创建包含CRUD操作的Web API接口-第一部
在这里,我们将创建一个新的Web API项目,它将使用实体框架实现Get,POST.PUT和DELETE方法来实现CRUD操作. 首先,在Visual Studio 2013 for Web expr ...
- IdentityServer4实现OAuth2.0四种模式之授权码模式
接上一篇:IdentityServer4实现OAuth2.0四种模式之隐藏模式 授权码模式隐藏码模式最大不同是授权码模式不直接返回token,而是先返回一个授权码,然后再根据这个授权码去请求token ...
- cxx11emu.h 和 logprint.h
cxx11emu.h 和 logprint.h /* Start of cxx11emu.h */ #ifndef STDBP_CXX11EMU_H_ #define STDBP_CXX11EMU_H ...
- 【转载】Extjs设置Ajax请求的超时时间timeout
在Extjs中的Ajax请求中,Ext.Ajax.request 默认超时时间是30秒,有时候我们有比较耗时的操作需要设置更长时间,此时我们就需要修改Ext.Ajax.Requset的超时时间为更长, ...
- 从Iterator到async/await
Generator和Async 引言 接触过Ajax请求的会遇到过异步调用的问题,为了保证调用顺序的正确性,一般我们会在回调函数中调用,也有用到一些新的解决方案如Promise相关的技术. 在异步编程 ...