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
  • 相关阅读:
    冲刺阶段 day1
    目标系统流程图 数据流图
    团队作业二
    校外实习报告(十二)
    校外实习报告(十一)
    第二周实习总结
    校外实习报告(十)
    校外实习报告(九)
    校外实习报告(八)
    校外实习报告(七)
  • 原文地址:https://www.cnblogs.com/lyj910313/p/10787242.html
Copyright © 2011-2022 走看看