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实现事件功能--汽车过红绿灯(转载)的更多相关文章

  1. python之event【事件】

    # 线程之间用于交互的一个对象,这个event是一个内部的标签,线程可以等待这个标签的状态 #举个例子,比如红绿灯是一个线程,三辆汽车是3个线程,如果为红灯,则三个汽车的线程必须 #要停止,如果是绿灯 ...

  2. Python多线程的threading Event

    Python threading模块提供Event对象用于线程间通信.它提供了一组.拆除.等待用于线程间通信的其他方法. event它是沟通中最简单的一个过程之中,一个线程产生一个信号,号.Pytho ...

  3. Python多线程-Event(事件对象)

    Event 事件对象管理一个内部标志,通过set()方法将其设置为True,并使用clear()方法将其设置为False.wait()方法阻塞,直到标志为True.该标志初始为False. 方法: i ...

  4. python学习笔记——创建事件对象Event

    1 Event对象的基本概述 用 multiprocessing.Event 实现线程间通信,使用multiprocessing.Event可以使一个线程等待其他线程的通知,我们把这个Event传递到 ...

  5. python线程的同步事件Event

    Event对象: 用于线程间的通信,某个线程需要根据其他线程的状态来判断自己的下一步操作. Event内部定义了一个全局变量:_flag,默认为False. 当_flag = False时,会阻塞当前 ...

  6. Python基础之多线程事件Event

    import threading,time class Boss(threading.Thread): def run(self): print("BOSS:伙计们今晚上加班到22:00&q ...

  7. Python threading(多线程)

    threading模块在较低级别thread模块之上构建更高级别的线程接口. 一.threading模块定义了以下函数和对象: threading.active_count() 等同于threadin ...

  8. 后台程序处理(二) python threading - queue 模块使用

    由于协程没办法完成(一)中所说的任务模式 接下来就尝试一下使用线程和队列来实现一下这个功能 在实现之前,我们先明确一个问题--python的线程是伪并发的.同一时间只能有一个线程在运行.具体怎样的运作 ...

  9. python threading.thread

    Thread 是threading模块中最重要的类之一,可以使用它来创建线程.有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法:另一种是创建一个threading.Thread对 ...

随机推荐

  1. .Net WEB 程序员需要掌握的技能

    原文链接:http://deshui.wang/%E6%8A%80%E6%9C%AF/2015/05/12/net-study-road 基础部分 C# 基础语法 OOP的概念,面向对象的理解 继承 ...

  2. winrar 命令行 解压文件

    1,最简单的压缩命令:winrar a asdf.txt.rar asdf.txt a的意思是进行压缩动作,后面第一个参数是被压缩后的文件名,后缀当然是rar了,最后面 的参数就是要被压缩的文件名 2 ...

  3. LINUX下 一句话添加用户并设置ROOT权限

    来源:linux一条命令添加用户并设置密码 linux一条命令添加一个root级别账户并设置密码 LINUX提权,除非是拿的EXP反弹CMD,才会有回显,这样添加管理员方便了. 通常是在SHELL,菜 ...

  4. 使用SharedPreference保存用户数据的步骤

    1. 声明 SharedPreferences sp; 2. 初始化 sp = this.getSharedPreferences("文件名", 0);//0代表的是私有 3. 获 ...

  5. Java_try,catch,finally return之间的执行顺序

    以往认为函数只要执行到return语句便会返回结果并终止,然而这时错误的,因为这存在特例. 掌握下面几条原则就可以完全解决“当try.catch.finally遭遇return”的问题. 原则:1.f ...

  6. IntelliJ IDEA(Community版本)的下载、安装和WordCount的初步使用(本地模式和集群模式)

    不多说,直接上干货! 对于初学者来说,建议你先玩玩这个免费的社区版,但是,一段时间,还是去玩专业版吧,这个很简单哈,学聪明点,去搞到途径激活!可以看我的博客. 包括: IntelliJ IDEA(Co ...

  7. sql日期格式处理

    sql server中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-02-01 ...

  8. JS浮点数精确计算方法

    function add(a, b) { var c, d, e; try { c = a.toString().split(".")[1].length; } catch (f) ...

  9. 运维甩锅神器---Jumpserver

    简介jumpserver 也就是跳板机,堡垒机,主要用于免密钥登陆web终端,可以对所有操作进行记录,录像!对所有服务器进行资产管理, 给开发人员分配登陆主机的权限和sudo权限,为运维人员省了很多手 ...

  10. 几句话说说跨IDC分布式数据库Calvin

    CalvinFS拿了FAST 15最佳论文:找到了失联十三年的小伙伴:年终/年初整理资料,发现做团委工作的 King 师兄对Calvin有兴趣:最近其他团队对分布式事务和存储问题/兴趣较多……几件事激 ...