zoukankan      html  css  js  c++  java
  • day38-进程-事件

    #1、事件Event:以交通灯为例。可以控制所有进程等待或者运行。
    from multiprocessing import Event
    e = Event() #实例化一个事件,创建一个交通灯,默认是红灯,阻塞。
    e.set()     #红变绿,非阻塞。可以控制所有进程通行。。
    e.wait()    #停的时候看灯,上面代码是绿灯,绿灯行红灯停,所以wait是非阻塞。
    e.clear()   #绿变红,阻塞。可以控制所有进程等待。
    e.is_set()  #是否绿灯。True是绿灯,False就是红灯。
    
    #2、Event里面有一个标志flag,当e = Event()刚创建的时候,flag=False,阻塞,这个时候,e.is_set()也是等于False,阻塞。
    #e.set()让flag变成非阻塞,e.clear()让flag变成阻塞。
    #e.wait() 当flag=True,非阻塞;当flag=False,阻塞。
    
    #3、
    from multiprocessing import Process
    from multiprocessing import Event
    import time
    import random
    def traffic_light(e):  #红绿灯
        while True:
            if e.is_set():      #如果是绿灯,3秒后变红灯。
                time.sleep(3)
                print('变红灯')
                e.clear()       #变红灯。
            else:
                time.sleep(3)
                print('变绿灯')
                e.set()         #变绿灯。
    
    def car(i,e):
        e.wait()               #停下来看一下灯,如果是绿灯,就是不阻塞,接着执行下面的代码,否则红灯阻塞,不执行下面代码。
        print('车%s通过'%i)
    
    if __name__ == '__main__':
        e = Event()             #创建一个红绿灯。
        tra_p = Process(target=traffic_light,args=(e,)) #创建红绿灯转换的进程。
        tra_p.start()
        for i in range(100):   #假设有100辆车通过红绿灯。
            if i%6 == 0: #每6辆车会随机等1至3秒,如果每6辆车都是等待1秒,那么在3秒的绿灯时间里,可以通过18辆车。
                time.sleep(random.randint(1,3))
            car_p = Process(target=car,args=(i,e))
            car_p.start()
  • 相关阅读:
    新人优惠的风险
    Linux服务器记录并查询历史操作记录
    斜率比截距重要
    专访李果:初生牛犊不怕虎的移动创业者
    iPhone开发视频教程 ObjectiveC部分 (51课时)
    珍藏40个android应用源码分享
    iPhone开发教程 UI基础课程(58课时)
    ios源码分享之动画类
    史上最全的ios源码汇总。欢迎收藏
    Android开发教程汇总
  • 原文地址:https://www.cnblogs.com/python-daxiong/p/12142723.html
Copyright © 2011-2022 走看看