python-多进程编程(三)-- 事件event

事件Event是用于堵塞进程执行的一个用途,可以让进程之间做到同时堵塞同时进行,类似于一种断点的效果,常用于一种信号状态的传递

Event类的基础用法

e = Event() #创建一个event对象

e.is_set() #展示当前event的状态,一个对象刚被创建是,状态都为False即阻塞状态

e.wait()  #wait方法会根据当前的对象状态来控制程序是否阻塞

e.set()  #将当前的事件状态改为True

e.clear() #将当前的事件状态改为False

下面我们展示一个简单的例子,因为一开始默认创建的事件,为false状态,因此我们先用set将状态改为Ture,这样654321字符串被打印了出来,随后使用clear将状态重新改为False之后,就被堵塞了,因此“123456”无法被打印出来了

from multiprocessing import Event

e = Event()

print(e.is_set())
e.set()
e.wait()
print(654321)
e.clear()
e.wait()
print(123456)

----------------------
False
654321

红绿灯模型

下面这个例子展示的就是event堵塞的效果,当绿灯亮的时候,就会使得cars方法向下执行,而当红灯亮的时候就会堵塞程序的执行

from multiprocessing import Process,Event
import random
from time import sleep

def lights(e):
    while True:
        e.clear()
        print("红灯亮,禁止通行")
        sleep(8)
        e.set()
        print("绿灯亮,冲冲冲")
        sleep(8)

def cars(i,e):
    if e.is_set:
        print("car%i在等待"%i)
        e.wait()
    e.wait()
    print("car%i通过了"%i)

if __name__ == '__main__':
    e = Event()
    p = Process(target=lights,args=(e,))
    p.start()
    car = Process(target=cars,args=(i,e))
    car.start()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值