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. Python 获取文件类型后缀

    import os path='file.txt' file=os.path.splitext(path) filename,type=file print(filename) print(type)

  2. 第4/7Beta冲刺

    1.团队成员 成员姓名 成员学号 秦裕航 201731062432(组长) 刘东 201731062227 张旭 201731062129 王伟 201731062214 2.SCRU部分 2.1各成 ...

  3. LeetCode 74. 搜索二维矩阵(Search a 2D Matrix)

    74. 搜索二维矩阵 74. Search a 2D Matrix 题目描述 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. ...

  4. [转帖]Socat 入门教程

    https://www.hi-linux.com/posts/61543.html 现在安装k8s 必须带 socat 今天看一下socat 到底是啥东西呢. Socat 是 Linux 下的一个多功 ...

  5. linux svn开机自动启动服务

    SVN设置开机自动启动 usr/lib/systemd/system/添加svn.service文件 home/sdbdatasvn/svnrepos(换成绝对路径) 如果出现权限问题,请chmod  ...

  6. 转发:for /f命令之—Delims和Tokens用法&总结

    在For命令语踞饽参数F中,最难理解的就是Delims和Tokens两个选项,本文简单的做一个比较和总拮.“For /f”常用来解析文本,读取字符串.分工上,delims负责切分字符串,而tokens ...

  7. LOJ2074/2157 JSOI2016/POI2011 Lightning Conductor 决策单调性DP

    传送门 我们相当于要求出\(f_i = \max\limits_{j=1}^{n} (a_j + \sqrt{|i-j|})\).这个绝对值太烦人了,考虑对于\(i>j\)和\(i<j\) ...

  8. python pip 切换阿里云镜像

    示例: pip install xxx -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

  9. windows 查看端口占用以及解决办法

    windows 下查看所有端口程序1 netstat -ano 查看所有的端口占用情况2 netstat -ano|findstr "443" 查看端口为443的程序占用情况3 t ...

  10. ConsoleLoggerExtensions.AddConsole(ILoggerFactory)已过时代码修复

    0x00.问题 netcoreapp2.2环境下, Startup.cs 代码配置如下 public void Configure(IApplicationBuilder app, IHostingE ...