Event: 用于线程之间状态的同步。对全局变量不断地做修改。

Event=threading.Event()  #生成1个event的对象

Event.wait() #等着设定全局变量。检测标志位是否有设置,如果标志位没有设置的话,会一直卡在这里。等待标志位被设定。

如果标志位被设定了,代表绿灯,直接通行。wait不阻塞。

如果标志位被清空,代表红灯,wait等待。

多个线程可以等待同一个event的标志位的变化。

Event.set() #设置一个标志位,相当于全局变量

Event.clear() #清空标志位

Event.is_set() #判断是否设置了标志位

理解点:

1.车的线程与红绿灯的线程之间有了关联,车的线程会根据红绿灯的线程而变化。

2.每一次状态的切换,就是一次事件的发生,会相应地做不同的事情。

import time,threading

event=threading.Event()

def lighter():
count=0
event.set() #先设为绿灯
while True:
if count>5 and count<10: #改成红灯
event.clear() #清空标志位,在红灯状态卡10s
print('\033[41;1mred light is on..\033[0m')
elif count>10:
event.set()#变绿灯
count=0
else:
print('\033[42;1mgreen light is on..\033[0m')
time.sleep(1)
count+=1 def car(name):
while True:
if event.is_set(): #设置了标志位,代表绿灯
print('[%s] running...'%name)
time.sleep(1)
else:
print('[%s] red light,waiting..'%name)
event.wait()
print('[%s] green is on, start going.'%name ) light=threading.Thread(target=lighter,)
light.start()
car1=threading.Thread(target=car,args=('Tesla',))
car1.start()

运行结果:

green light is on..
[Tesla] running...
green light is on..
[Tesla] running...
green light is on..
[Tesla] running...
[Tesla] running...
green light is on..
[Tesla] running...
green light is on..
[Tesla] running...
green light is on..
[Tesla] running...
red light is on..
red light is on..
[Tesla] red light,waiting..
red light is on..
red light is on..
green light is on..
[Tesla] green is on, start going.
[Tesla] running...
green light is on..
[Tesla] running...

Events-事件-红绿灯的更多相关文章

  1. ActiveX控件的Events事件

    http://labview360.com/article/info.asp?TID=10152&FID=165 Active X函式库 对使用LabVIEW作为开发环境的开发人员来说,如果能 ...

  2. Node.js:events事件模块

    Nodejs的大部分核心API都是基于异步事件驱动设计的,所有可以分发事件的对象都是EventEmitter类的实例. 大家知道,由于nodejs是单线程运行的,所以nodejs需要借助事件轮询,不断 ...

  3. Laravel 的 Events(事件) 及 Observers(观察者)

    你是否听说过单一职责原则(single responsibility principle)?我希望是的.它是程序设计的基本原则之一,它基本上的意思就是,一个类有且只有一个职责.换句话说,一个类必须且只 ...

  4. Python并发编程-事件,红绿灯控制

    事件用来控制多个进程同时执行或者阻塞 set和clear 分别用来修改一个事件的状态,True或者False is_set 用来查看一个事件的状态 wait 是依据事件的状态来决定自己是否在wait处 ...

  5. events(事件): 基础1

    1    所有能触发事件的对象都是 EventEmitter 类的实例. 这些对象开放了一个 eventEmitter.on() 函数,允许将一个或多个函数绑定到会被对象触发的命名事件上. 事件名称通 ...

  6. Lind.DDD.Events事件总线~自动化注册

    回到目录 让大叔兴奋的自动化注册 对于领域事件之前说过,在程序启动时订阅(注册)一些事件处理程序,然后在程序的具体位置去发布(触发)它,这是传统的pub/sub模式的体现,当然也没有什么问题,为了让它 ...

  7. English trip -- VC(情景课) 6 B Events 事件

    xu言: ...  自己选择的路,就算是爬,也要给我爬完.短短人生数载,我能之止于此? Words appointment  预约 meeting  会议 class movie party prog ...

  8. openwrt gstreamer实例学习笔记(七. gstreamer 缓冲区(Buffers)和事件(Events))

    1)概述 管道的数据流由一组缓冲区和事件组成,缓冲区包括实际的管道数据,事件包括控制信息,如寻找信息和流的终止信号.所有这些数据流在运行的时候自动的流过管道. 2) 缓冲区(Buffers) 缓冲区包 ...

  9. Python全栈开发-Day9-线程/GIL/事件/队列

    本节内容 进程与线程的概念 Python threading 模块 GIL——global interpreter lock Mutex互斥锁(线程锁) Semaphore信号量 Events事件 Q ...

  10. javaScirpt事件详解-原生事件基础(一)

    事件 JavaScript与HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间,通过监听特定事件的发生,你能响应相关的操作.图片引用:UI Events 事件流 ...

随机推荐

  1. 北京Uber优步司机奖励政策(12月20日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  2. CentOS 7.2使用源码包编译安装MySQL 5.7.22及一些操作

    CentOS 7.2使用源码包编译安装MySQL 5.7.22及一些操作 2018年07月05日 00:28:38 String峰峰 阅读数:2614   使用yum安装的MySQL一般版本比较旧,但 ...

  3. SpringBoot学习:整合shiro(验证码功能和登录次数限制功能)

    项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821 (一)验证码 首先login.jsp里增加了获取验证码图片的标签: <body s ...

  4. jdbc 连接各种数据库

    package com.fh.controller.ruitai.util; import java.sql.Connection; import java.sql.DriverManager; im ...

  5. 2019年猪年海报PSD模板-第一部分

    14套精美猪年海报,免费猪年海报,下载地址:百度网盘,https://pan.baidu.com/s/1i7bIzPRTX0OMbHFWnqURWQ                        

  6. Python列表操作大全(非常全)

    Python列表操作大全(非常全!!!) 对于python列表的理解可以和C语言里面的数组进行比较性的记忆与对照,它们比较相似,对于python里面列表的定义可以直接用方括号里加所包含对象的方法,并且 ...

  7. TW实习日记:第28天

    同前两天一样,等接口,开发,调试接口.重复地做着低级代码得搬运工作,确实挺没意思的.怪不得有些人一直说写低级代码很无聊,没有创造性和成就感.31号准备溜了,还是好好复习准备秋招吧. 挖坑清单: Vue ...

  8. 计蒜客蓝桥杯模拟赛 后缀字符串:STL_map+贪心

    问题描述 一天蒜头君得到 n 个字符串 si​,每个字符串的长度都不超过 10. 蒜头君在想,在这 n 个字符串中,以 si​ 为后缀的字符串有多少个呢? 输入格式 第一行输入一个整数 n. 接下来  ...

  9. @Configuration和@Bean

    @Configuration可理解为用spring的时候xml里面的标签 @Bean可理解为用spring的时候xml里面的标签 Spring Boot不是spring的加强版,所以@Configur ...

  10. metamask注记词

    leaf orbit poet zebra toy day put dinosaur review cool pluck throw(m) 一个钱包地址 里面有多个账号 菲苾代表了不同网络