事件(event)

  • 事件是不同线程之间的同步对象
  • enent可以通过设置、等待、清除一个标识(flag),来进行线程间的控制
  • 线程可以通过获取这个标志位(flag)的状态(设置或未设置)来控制线程
  • 事件其实就相当于一个全局变量(设置为True,未设置为False),线程通过这个全局变量的状态来控制自身

event只要set,clear,wait三个方法

  • 使用前先实例化event = threading.Event()
  • event.wait()#线程阻塞,等待标志位被设置
  • event.set()#设置标志位
  • event.clear()#清除标志位

  • enent.isSet()#标志位是否被设置

红绿灯事件模型

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()

线程Event事件的更多相关文章

  1. (14)线程- Event事件和守护线程Daemon

    <一>Event事件 线程Event基本和进程的Event语法是一样的 # wait() 动态给程序加阻塞 # set() 将内部属性改成True # clear() 将内部属性改成Fal ...

  2. Python之路(第四十五篇)线程Event事件、 条件Condition、定时器Timer、线程queue

    一.事件Event Event(事件):事件处理的机制:全局定义了一个内置标志Flag,如果Flag值为 False,那么当程序执行 event.wait方法时就会阻塞,如果Flag值为True,那么 ...

  3. 线程event事件函数实现红绿灯

    #!/usr/bin/env python # -*- coding: utf-8 -*- # author aliex-hrg import threading,time event = threa ...

  4. 经典线程同步 事件Event

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇 一个经典的多线程同步问题> <秒杀多线程第五篇 经典线程同步关键段CS> 上一篇中使用关键段来解决经典的多线程同步互斥问题 ...

  5. 多线程面试题系列(6):经典线程同步 事件Event

    上一篇中使用关键段来解决经典的多线程同步互斥问题,由于关键段的"线程所有权"特性所以关键段只能用于线程的互斥而不能用于同步.本篇介绍用事件Event来尝试解决这个线程同步问题.首先 ...

  6. 1.gil全局解释器锁, 2. 死锁与递归锁 3. 信号量 4. Event事件 5. 线程queue

    gil本质就是一把互斥锁,相当于执行权限,每个进程都会存在一把gil,同一进程内的多个线程必须抢到gil 之后才能使用cpython解释器来执行自己的代码,同一进程下的多线程不能并行,但可以实现并发 ...

  7. 转--- 秒杀多线程第六篇 经典线程同步 事件Event

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇 一个经典的多线程同步问题> <秒杀多线程第五篇 经典线程同步关键段CS> 上一篇中使用关键段来解决经典的多线程同步互斥问题 ...

  8. Python 36 死锁现象和递归锁、信号量、Event事件、线程queue

    一:死锁现象和递归锁 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远 ...

  9. Event事件、进程池与线程池、协程

    目录 Event事件 进程池与线程池 多线程爬取梨视频 协程 协程目的 gevent TCP服务端socket套接字实现协程 Event事件 用来控制线程的执行 出现e.wait(),就会把这个线程设 ...

随机推荐

  1. 快速沃尔什变换 FWT 学习笔记【多项式】

    〇.前言 之前看到异或就担心是 FWT,然后才开始想别的. 这次学了 FWT 以后,以后判断应该就很快了吧? 参考资料 FWT 详解 知识点 by neither_nor 集训队论文 2015 集合幂 ...

  2. windows 下加载执行hta文件的方法

    首先编写这么一个hta的文件: <html> <head> <script> s = new ActiveXObject("WScript.Shell&q ...

  3. (六)Audio子系统之AudioRecord.release

      在上一篇文章<(五)Audio子系统之AudioRecord.stop>中已经介绍了AudioRecord如何暂停录制,接下来,继续分析AudioRecord方法中的release的实 ...

  4. MD5 工具类

    package com.payease.chains.risk.utils; /** * md5密码加密工具类 * Created by liuxiaoming on 2017/8/28. */ pu ...

  5. Java项目打包成exe的详细教程

    Java项目打包成exe的详细教程 把Java项目打包成exe共分为以下两步: 1. 利用Eclipse先把Java项目先打成jar包 2. 利用exe4j工具把jar包转成exe 这里以Java项目 ...

  6. disable Nouveau kernel driver

    nano /etc/modprobe.d/blacklist-nouveau.conf with the following contents: blacklist nouveau options n ...

  7. GANS--理解

    GAN所建立的一个学习框架,实际上就是生成模型和判别模型之间的一个模仿游戏.生成模型的目的,就是要尽量去模仿.建模和学习真实数据的分布规律:而判别模型则是要判别自己所得到的一个输入数据,究竟是来自于真 ...

  8. Tomcat的配置文件Server.xml解析

    配置元素说明: 元素名 属性 解释 server port 指定一个端口,这个端口负责监听关闭tomcat 的请求 shutdown 指定向端口发送的命令字符串 service name 指定serv ...

  9. window.location.href详解

    在写web程序的时候,我们经常遇到跳转页面的问题,我们经常使用Response.Redirect做页面跳转,如果客户要在跳转的时候使用提示,这个就不灵光了,如: Response.Write(&quo ...

  10. 微信授权获取code(微信支付)

    摘要:最近在做h5支付,然后发现一个问题,微信自带浏览器不支持h5支付,然后后台又做了一个微信支付的接口,然后要传code参数,代码写好总结后,就发到这里记录一下: 因为有两个支付接口,所以首先判断打 ...