(6)进程---Event事件

# 阻塞事件 :

e = Event()生成事件对象e

e.wait()是给程序加阻塞 , 程序当中是否加阻塞完全取决于该对象中的is_set() [默认返回值是False]

e.wait(2) 传参,相当于time.sleep(2)

# 如果是True 那就不加阻塞

# 如果是False 就加阻塞

# 控制这个属性的值

# set()方法 将这个属性的值改成True

# clear()方法 将这个属性的值改成False

# is_set()方法 判断当前的属性是否为True (默认上来是False)

 例:模拟红绿灯,假设有20辆小车全部通过后,红绿灯终止;

from multiprocessing import Process, Event
import time, random
def traffic_light(e):
    # traffic_light 只做一件事就是红灯和绿灯的变色效果
    print("红灯亮")
    while True:
        # 默认is_set 获取到的值是False
        if e.is_set():
            # 红灯区间
            time.sleep(1)
            print("红灯亮")
            e.clear()  # False
        else:
            # 绿灯区间
            time.sleep(1)
            print("绿灯亮")
            e.set()  # True


def car(e, i):
    # e.is_set() 为False时成立
    if not e.is_set():
        print("car %s 在等待" % (i))
        e.wait()
    print("car %s 通过了" % i)


if __name__ == "__main__":
    e = Event()
    lst = []
    p = Process(target=traffic_light, args=(e,))
    p.daemon = True
    p.start()

    for i in range(20):
        time.sleep(random.randrange(0, 2))
        p = Process(target=car, args=(e, i))
        p.start()
        lst.append(p)
    for p in lst:
        p.join()

    print("程序彻底跑完~")
View Code

执行结果: 如果想车辆跑完了,红绿灯继续运行,去掉守护进程和末尾的阻塞就可以了

红灯亮
绿灯亮
car 0 通过了
car 1 通过了
红灯亮
car 3 在等待
car 2 在等待
car 4 在等待
car 5 在等待
car 6 在等待
绿灯亮
car 4 通过了
car 3 通过了
car 2 通过了
car 5 通过了
car 6 通过了
car 7 通过了
car 9 通过了
car 8 通过了
car 10 通过了
红灯亮
car 11 在等待
绿灯亮
car 11 通过了
car 13 通过了
car 12 通过了
car 14 通过了
红灯亮
car 15 在等待
绿灯亮
car 15 通过了
car 17 通过了
car 16 通过了
car 18 通过了
红灯亮
car 19 在等待
绿灯亮
car 19 通过了
程序彻底跑完~

Process finished with exit code 0
View Code

 

转载于:https://www.cnblogs.com/lyj910313/p/10787242.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值