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()
  • 相关阅读:
    Oracle SQL语句收集
    SqlParameter In 查询
    SQL 性能优化
    Entity Framework
    【XLL API 函数】 xlfSetName
    【XLL API 函数】xlfUnregister (Form 2)
    【XLL API 函数】xlfUnregister (Form 1)
    【Excel 4.0 函数】REGISTER 的两种形式以及VBA等效语句
    【Excel 4.0 函数】REGISTER
    【Bochs 官方手册翻译】 第一章 Bochs介绍
  • 原文地址:https://www.cnblogs.com/python-daxiong/p/12142723.html
Copyright © 2011-2022 走看看