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秒之间)

    结果:

  • 相关阅读:
    时装画基础知识--如何画人体
    马士兵java视频学习顺序
    Mysql 中文字符乱码问题
    zendstudio 设置默认编码 utf-8 gbk
    MYSQL 本地无ROOT权限 忘记密码
    windows 3389 远程
    windows 老掉牙CMD的命令
    mysql-常用注入渗透手法
    ubuntu 添加多个IP
    windows下简单配置apache
  • 原文地址:https://www.cnblogs.com/wangdianchao/p/12050775.html
Copyright © 2011-2022 走看看