Events-事件-红绿灯
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-事件-红绿灯的更多相关文章
- ActiveX控件的Events事件
http://labview360.com/article/info.asp?TID=10152&FID=165 Active X函式库 对使用LabVIEW作为开发环境的开发人员来说,如果能 ...
- Node.js:events事件模块
Nodejs的大部分核心API都是基于异步事件驱动设计的,所有可以分发事件的对象都是EventEmitter类的实例. 大家知道,由于nodejs是单线程运行的,所以nodejs需要借助事件轮询,不断 ...
- Laravel 的 Events(事件) 及 Observers(观察者)
你是否听说过单一职责原则(single responsibility principle)?我希望是的.它是程序设计的基本原则之一,它基本上的意思就是,一个类有且只有一个职责.换句话说,一个类必须且只 ...
- Python并发编程-事件,红绿灯控制
事件用来控制多个进程同时执行或者阻塞 set和clear 分别用来修改一个事件的状态,True或者False is_set 用来查看一个事件的状态 wait 是依据事件的状态来决定自己是否在wait处 ...
- events(事件): 基础1
1 所有能触发事件的对象都是 EventEmitter 类的实例. 这些对象开放了一个 eventEmitter.on() 函数,允许将一个或多个函数绑定到会被对象触发的命名事件上. 事件名称通 ...
- Lind.DDD.Events事件总线~自动化注册
回到目录 让大叔兴奋的自动化注册 对于领域事件之前说过,在程序启动时订阅(注册)一些事件处理程序,然后在程序的具体位置去发布(触发)它,这是传统的pub/sub模式的体现,当然也没有什么问题,为了让它 ...
- English trip -- VC(情景课) 6 B Events 事件
xu言: ... 自己选择的路,就算是爬,也要给我爬完.短短人生数载,我能之止于此? Words appointment 预约 meeting 会议 class movie party prog ...
- openwrt gstreamer实例学习笔记(七. gstreamer 缓冲区(Buffers)和事件(Events))
1)概述 管道的数据流由一组缓冲区和事件组成,缓冲区包括实际的管道数据,事件包括控制信息,如寻找信息和流的终止信号.所有这些数据流在运行的时候自动的流过管道. 2) 缓冲区(Buffers) 缓冲区包 ...
- Python全栈开发-Day9-线程/GIL/事件/队列
本节内容 进程与线程的概念 Python threading 模块 GIL——global interpreter lock Mutex互斥锁(线程锁) Semaphore信号量 Events事件 Q ...
- javaScirpt事件详解-原生事件基础(一)
事件 JavaScript与HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间,通过监听特定事件的发生,你能响应相关的操作.图片引用:UI Events 事件流 ...
随机推荐
- SQl 语句 表的连接
当涉及到多个表查询时就需要使用将表连接的方法进行查询. SQL语句连接的方式根本上分为5种: •EQUI JOIN •SEMI JOIN 3 •ANTI JOIN 4 •CROSS JOIN •DIV ...
- SLAM前沿问题梳理
鲁棒性问题:数据关联是影响系统鲁棒性的主要原因 特征提取.线特征 短期内的数据关联是最容易处理的,新的研究方向包括特征提取.线特征等. 回环检测 对于前端的环闭合检测,检测当前测量中的特征并试图将它们 ...
- MySQL - 问题集 - Access denied; you need the SUPER privilege for
当执行存储过程相关操作时,如果出现该错误,则往下看. 打开存储过程,会发现“CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost`”. 由于DEFI ...
- 100万套PPT模板,包含全宇宙所有主题类型PPT,绕宇宙100圈,持续更新
100万套PPT模板,包含全宇宙所有主题类型PPT(全部免费,都是精品,没有一张垃圾不好看的PPT,任何一张PPT拿来套入自己的信息就可以立马使用),绕宇宙100圈,任意一个模板在某文库上都价不菲.强 ...
- 微信小程序如何性能测试?
背景: 微信小程序作为手机页面的一种,相比传统的网站和应用来说存在比较特殊的地方: 1. 开发者往往对程序做了限制,只能通过微信客户端访问 2. 通过微信的Oauth进行认证 这样往往会导致我们的 ...
- Selenium 入门到精通系列:六
Selenium 入门到精通系列 PS:Checkbox方法 例子 HTML: <html> <head> <title>测试页面</title> &l ...
- 【SpringCloud 】第八篇: 消息总线(Spring Cloud Bus)
前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...
- 【SpringCloud】第七篇: 高可用的分布式配置中心(Spring Cloud Config)
前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...
- 微信小程序入门学习之事件 事件对象 冒泡非冒泡事件(1)
这关于事件的学习,可以自己复制到微信开发者工具上自己运行试试. 首先这里有两个文件.js 和.wxml 文件 首先给出.js文件下代码 // pages/news/news.js Page({ /** ...
- 十二:NodeManager
NM负责启动和管理节点上的containers.AM通过containers来运行任务. Health Checker Service 创建检查服务 NM运行一个检查服务来检查节点的状态,该服 ...