Event

2018-06-17 23:40:57来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

一、前言

  Python线程的Event(事件)用于主线程控制其他线程的执行,Event主要提供了 set、wait 、clear等方法

set():
# 将 flag设置为 True,形象的说就是设置为绿灯,表示可以通行

clear():
# 将flag清除即 False,也就是说设置为红灯,不能通行

wait():
# 如果flag 为 False,event.wait 就会阻塞,如果flag为True,event.wait就通行
# 多个线程可以等待同一个事件

二、红绿灯实例

  有个红灯停,绿灯行的简单事例:  

# -*- coding: UTF-8 -*-

import time
import threading


class EventThread(threading.Thread):

    "使用event事件让主线程来控制其他线程"
    
    def run(self):
        count = 0
        event.set()  # 先设置绿灯
        while True:
            if count < 5:
                print("\033[42;1m green light is on...\033[0m")
            elif count < 10:
                event.clear()  # 把标志位清除,意味着变为红灯
                print("\033[41;1m red light is on...\033[0m")
            else:
                event.set()
                count = 0
            time.sleep(1)
            count += 1


class CarThread(threading.Thread):

    "汽车线程受红绿灯控制"
    
    def __init__(self, name):
        super(CarThread, self).__init__()
        self.name = name

    def run(self):
        while True:
            if event.is_set():  # 代表绿灯
                print('[%s] running...' % self.name)
                time.sleep(1)  # 跑的进程少一些
            else:
                print('\033[41;1m red light,cannot run...\033[0m')
                event.wait()  # 等待标志位设置,即等待绿灯的意思
                print('\033[42;1m [%s], green light now, can run...\033[0m' % self.name)


event = threading.Event()

if __name__ == '__main__':

    light = EventThread()
    light.start()
    car_names = ['car1', 'car2', 'car3', 'car4', 'car5']
    for i in range(5):
        car = CarThread(car_names[i])
        car.start()

  汽车只会在绿灯的时候跑起来

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Semaphore信号量

下一篇:Python中strip()、lstrip()、rstrip()用法详解