zoukankan      html  css  js  c++  java
  • Python中协程Event()函数

    python线程的事件用于主线程控制其他线程的执行,事件主要提供了三个方法wait、clear、set

    事件处理的机制:全局定义了一个“Flag”,如果“Flag”值为 False,那么当程序执行 event.wait 方法时就会阻塞,如果“Flag”值为True,那么执行event.wait 方法时便不再阻塞。

    • clear:将“Flag”设置为False
    • set:将“Flag”设置为True

    用 threading.Event 实现线程间通信,使用threading.Event可以使一个线程等待其他线程的通知,我们把这个Event传递到线程对象中,

    Event默认内置了一个标志,初始值为False。一旦该线程通过wait()方法进入等待状态,直到另一个线程调用该Event的set()方法将内置标志设置为True时,该Event会通知所有等待状态的线程恢复运行。

     1 #!/usr/bin/python3
     2 #_*_ coding: UTF-8 _*_
     3 
     4 
     5 import threading, time
     6 import random
     7 
     8 def light():
     9     if not event.isSet():
    10         event.set()  #wait就不阻塞 #绿灯状态
    11     count = 0
    12     i=0
    13     while True:
    14         if count <10:
    15             print("---green light on ---")
    16         elif count<13:
    17             print("---yellow light on ---")
    18         elif count <20:
    19             if event.isSet():
    20                 event.clear()
    21             print("---red light on ---")
    22         else:
    23             count = 0
    24             event.set()#打开绿灯
    25         time.sleep(1)
    26         count +=1
    27         i+=1
    28         if(i>20):
    29             break
    30 def car(n):
    31     i=0
    32     while 1:
    33         time.sleep(random.randrange(3))
    34         if event.isSet():#如果是绿灯
    35             print("car [%s] is running.."%n)
    36         else:
    37             print("car [%s] is waiting for the red light.."%n)
    38         if(i>10):
    39             break
    40         else:
    41             i+=1
    42         
    43 if __name__ == '__main__':
    44     event = threading.Event()
    45     Light = threading.Thread(target=light)
    46     Light.start()
    47     for i in range(3):
    48         t = threading.Thread(target=car,args=(i,))
    49         t.start()
    50     
  • 相关阅读:
    docker-linux下的部署和基本命令
    Docker——Docker安装Sentinel
    分布式事务
    Git仓库完整迁移
    JWT token过期自动续期解决方案
    ORACLE用户的创建与授只读权
    Arthas-Java的线上问题定位工具
    mysql读写分离
    redis集群搭建-3.0/4.0版本
    相信自己,只要你努力了,你的梦想就可以实现
  • 原文地址:https://www.cnblogs.com/hoojjack/p/6639128.html
Copyright © 2011-2022 走看看