python-threading.Event实现事件功能--汽车过红绿灯(转载)
python-threading.Event实现事件功能
enent可以通过设置、等待、清除一个标识(flag),来进行线程间的控制
线程可以通过获取这个标志位(flag)的状态(设置或未设置)来控制线程
事件其实就相当于一个全局变量(设置为True,未设置为False),线程通过这个全局变量的状态来控制自身
event只要set,clear,wait三个方法
使用前先实例化event = threading.Event()
event.wait()#线程阻塞,等待标志位被设置
event.set()#设置标志位
event.clear()#清除标志位
enent.isSet()#标志位是否被设置
红绿灯事件模型,设置一个全局event,红绿灯进程按照时间改变event值,车辆进程根据event值作出相应动作。
import threading
import time,random
event = threading.Event()
#set为绿灯,clear为红灯
def light():
    count = 0
    if not event.isSet():
        event.set()#设置初始状态为绿灯
    while True:
        if count <10:
            #绿灯
            print('\033[1;42;1m绿灯-可以通行 %s\033[0m'%count)
            event.set()
        elif count <13:
            #黄灯
            print('\033[1;43;1m黄灯 %s\033[0m' % count)
        elif count <25:
            #红灯
            print('\033[1;41;1m红灯-禁止通行 %s\033[0m' % count)
            event.clear()
        else:
            count = 0
            event.set()
        count +=1
        time.sleep(1)
def car(n):
    while True:
        time.sleep(1)#random.randrange(3)
        if event.isSet():#绿灯状态
            print('car[%s] is running...'%str(n))
            #event.wait()
        else:
            print('car[%s] is waitting ...'%str(n))
            event.wait()#阻塞等待标志位被设定
def main():
    t_light = threading.Thread(target=light)
    t_light.start()
    for i in range(3):
        t_car = threading.Thread(target=car,args=(i,))
        t_car.start()
main()
原文地址https://www.cnblogs.com/limich/p/7477079.html
python-threading.Event实现事件功能--汽车过红绿灯(转载)的更多相关文章
- python之event【事件】
		
# 线程之间用于交互的一个对象,这个event是一个内部的标签,线程可以等待这个标签的状态 #举个例子,比如红绿灯是一个线程,三辆汽车是3个线程,如果为红灯,则三个汽车的线程必须 #要停止,如果是绿灯 ...
 - Python多线程的threading Event
		
Python threading模块提供Event对象用于线程间通信.它提供了一组.拆除.等待用于线程间通信的其他方法. event它是沟通中最简单的一个过程之中,一个线程产生一个信号,号.Pytho ...
 - Python多线程-Event(事件对象)
		
Event 事件对象管理一个内部标志,通过set()方法将其设置为True,并使用clear()方法将其设置为False.wait()方法阻塞,直到标志为True.该标志初始为False. 方法: i ...
 - python学习笔记——创建事件对象Event
		
1 Event对象的基本概述 用 multiprocessing.Event 实现线程间通信,使用multiprocessing.Event可以使一个线程等待其他线程的通知,我们把这个Event传递到 ...
 - python线程的同步事件Event
		
Event对象: 用于线程间的通信,某个线程需要根据其他线程的状态来判断自己的下一步操作. Event内部定义了一个全局变量:_flag,默认为False. 当_flag = False时,会阻塞当前 ...
 - Python基础之多线程事件Event
		
import threading,time class Boss(threading.Thread): def run(self): print("BOSS:伙计们今晚上加班到22:00&q ...
 - Python threading(多线程)
		
threading模块在较低级别thread模块之上构建更高级别的线程接口. 一.threading模块定义了以下函数和对象: threading.active_count() 等同于threadin ...
 - 后台程序处理(二) python threading - queue 模块使用
		
由于协程没办法完成(一)中所说的任务模式 接下来就尝试一下使用线程和队列来实现一下这个功能 在实现之前,我们先明确一个问题--python的线程是伪并发的.同一时间只能有一个线程在运行.具体怎样的运作 ...
 - python threading.thread
		
Thread 是threading模块中最重要的类之一,可以使用它来创建线程.有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法:另一种是创建一个threading.Thread对 ...
 
随机推荐
- (转)pt-online-schema-change在线修改表结构
			
原文:http://www.ywnds.com/?p=4442 一.背景 MySQL大字段的DDL操作:加减字段.索引.修改字段属性等,在5.1之前都是非常耗时耗力的,特别是会对MySQL服务产生影响 ...
 - 【es6】class
			
class是es6引入的最重要特性之一.在没有class之前,我们只能通过原型链来模拟类. 基本用法 如果你用过java这样的纯面向对象语言,那么你会对class的语法非常熟悉. class Peop ...
 - 手淘的移动端适配方案flexible
			
基于 vue-cli 配置手淘的 lib-flexible + rem,实现移动端自适应 安装 flexible npm install lib-flexible --save 引入 flexible ...
 - MyEclipse *的下载
			
找到MyEclipse的各种历史版本下载页面 : MyEclipse官方中文网 欢迎大家,加入我的微信公众号:大数据躺过的坑 人工智能躺过的坑 同时,大家可以关注我的个人博客 ...
 - Python -- Gui编程 -- Tkinter的使用 -- 对话框消息框
			
1.消息框 tkMessageBox.py import tkinter from tkinter import messagebox def cmd(): global n global butto ...
 - PMP备考指南之相关事项介绍
			
本文已同步至 GitHub/Gitee/公众号,感兴趣的同学帮忙点波关注~ PMP是当今IT.通信.建筑.等高新技术行业的热门资格认证,无论是技术升级管理,还是管理者的能力提升,都离不开PMP的理论体 ...
 - golang channel的使用
			
channel常常结合go程使用,作为通信消息队列 var testChan chan int fmt.Println(testChan) // nil 未初始化,没地址 testChan ) fmt ...
 - springboot-14-自定义properties文件值注入javaBean中
			
被这个问题困扰了好几天.... 在spring中, 从资源文件向bean中注入值非常简单, 只需要properties文件被spring加载, 然后在被spring管理的类写响应的属性, 然后 @Va ...
 - 面试题42:计算逆波兰表达式(RPN)
			
这是一个比较简单的题目,借助栈可以轻松实现逆波兰表达式. 题目描述: Evaluate the value of an arithmetic expression in Reverse Polish ...
 - 玩转mongodb(二):mongodb基础知识
			
常用基本数据类型: null null用于表示空值或者不存在的字段: {"data":null} 布尔型 布尔类型只有两个值,true和false: {"data&quo ...