zoukankan      html  css  js  c++  java
  • python_并发编程——事件

    1.事件

      :通过一个信号来控制多个进程同时执行或者阻塞。

        一个信号可以使所有的进程都进入阻塞状态,也可以控制所有的进程接触阻塞,一个事件被创建之后,默认是阻塞状态。

    from multiprocessing import Event
    
    e = Event() #创建事件对象
    print(e.is_set())   #查看一个事件的状态:默认是阻塞即False
    print(11111)
    e.wait()    #依据事件状态,来觉得是否阻塞
    print(22222)

    结果:

    2.解除阻塞:

    from multiprocessing import Event
    
    e = Event() #创建事件对象
    print(e.is_set())   #查看一个事件的状态:默认是阻塞即False
    print(11111)
    e.set()     #将事件的状态设置为True
    print(e.is_set())
    e.wait()    #依据事件状态,来觉得是否阻塞
    print(22222)

    结果:

    3.设置阻塞:

    from multiprocessing import Event
    
    e = Event() #创建事件对象
    print(e.is_set())   #查看一个事件的状态:默认是阻塞即False
    print(11111)
    e.set()     #将事件的状态设置为True
    print(e.is_set())
    e.wait()    #依据事件状态,来觉得是否阻塞
    print(22222)
    e.clear()       #将事件的状态改为False
    e.wait()
    print(e.is_set())
    print(33333)

    结果:

    应用:

    from multiprocessing import Process
    from multiprocessing import Event
    import time
    import random
    
    class Car(Process):
        def __init__(self,e,i):
            super().__init__()
            self.e = e
            self.i = i
        def run(self):
            if not self.e.is_set():
                print('{}在等红灯'.format(self.i))
                self.e.wait()   #阻塞,直到事件状态改变
            print('{}车通行'.format(self.i))
    
    class MyProcess(Process):
        def __init__(self,e):
            super().__init__()
            self.e = e
    
        def run(self):
            while True:
                if self.e.is_set():
                    self.e.clear()
                    print('红灯')
                else:
                    self.e.set()
                    print('绿灯')
                time.sleep(2)
    
    if __name__ == '__main__':
        e = Event()
        q1 = MyProcess(e)
        q1.start()
        for i in range(20):
            q2 = Car(e,i)
            q2.start()
            time.sleep(random.random()) #随机暂停时间(0-1秒之间)

    结果:

  • 相关阅读:
    linux 常用命令大全
    socket的读写函数readn和writen函数
    python中exec 和eval的用法
    python中set集合介绍
    python中下划线变量的规则和意义
    关于小端字节序和大端字节序的解释
    需要学习的网站
    关于尾递归节省内存空间
    python中的with语句
    python中的类变量和对象变量,以及传值传引用的探究
  • 原文地址:https://www.cnblogs.com/wangdianchao/p/12050775.html
Copyright © 2011-2022 走看看