zoukankan      html  css  js  c++  java
  • (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
  • 相关阅读:
    要加班了!
    项目经理的职责[转]
    用例图(User Case)
    c# 获取收藏夹目录到树型控件
    活动图(Activity Diagram)
    switch case重构事例[转]
    iframe 语法小结
    CSS入门
    Net中几种不同方式的文件下载
    网页效果集合
  • 原文地址:https://www.cnblogs.com/lyj910313/p/10787242.html
Copyright © 2011-2022 走看看