• Events不同线程之间同步对象

参数说明:

# 实例化event对象
event = threading.Event() # 等待检测标志位被设定,标志位设置后就不阻塞了
# 客户机线程可以等待设置标志
event.wait() # 设置一个全局变量标志位True
event.set() # 清空全局变量False
event.clear()

events模板:

  通过Event来实现两个或多个线程间的交互,下面是一个红绿灯的例子,即起动一个线程做交通指挥灯,生成几个线程做车辆,车辆行驶按红灯停,绿灯行的规则。
  标志位被设定,代表绿灯,直接同行,标志位清空,代表红灯,wait等待变绿等。每一量车都可以等待同一个事件。
  6秒绿灯变红灯,4秒红灯变绿等,事件的连锁变化。
import time,threading

# 生成event实例对象
event = threading.Event() # 设置红绿灯函数
def lighter(): # 设置变量0
count = 0 # 设置event为True 启动绿灯
event.set()
while True:
# 如果在5以上10一下就成立
if count >5 and count < 10:
# 清空event为False,显示红灯
event.clear()
print("\033[41;1mThe red light..\033[0m")
# 如果10以上就成立
elif count >10:
# 设置为True 变绿灯
event.set()
# 还原为0
count = 0
else:
print("\033[42;1mThe green light..\033[0m") # 每次1秒就+1
time.sleep(1)
count +=1 # 模拟车量函数
def car(name):
while True:
# 测试是否设置了标识位,射了为True,未射False
if event.is_set():
print("[%s] running..."%name)
time.sleep(1)
else:
# 为False的时候就是红灯
print("[%s] sees red light , waiting..."%name)
# 等待检测标识位,表示位后往下执行
event.wait()
print("\033[34;1m[%s] green light is on,start going...\033[0m"%name) # 生成实例话执行红绿灯线程
light = threading.Thread(target=lighter)
light.start() # 生成实例话执行车线程
car1 = threading.Thread(target=car,args=("Tesla",))
car1.start()

Python events的更多相关文章

  1. python urllib模块

    1.urllib.urlopen(url[,data[,proxies]]) urllib.urlopen(url[, data[, proxies]]) :创建一个表示远程url的类文件对象,然后像 ...

  2. Python 运维之路

    第一章:Python基础知识 1.Python 变量了解 .Python 二进制 .Python 字符编码 4.Python if条件判断 5.Python while循环 6.Python for循 ...

  3. python中对 函数 闭包 的理解

    最近学到 函数 闭包的时候,似懂非懂.迷迷糊糊的样子,很是头疼,今天就特意查了下关于闭包的知识,现将我自己的理解分享如下! 一.python 闭包定义 首先,关于闭包,百度百科是这样解释的: 闭包是指 ...

  4. python官网导航翻译

  5. 系统学习爬虫_2_urllib

    什么是urllib urlopen urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cad ...

  6. Python threads synchronization: Locks, RLocks, Semaphores, Conditions, Events and Queues(Forwarding)

    This article describes the Python threading synchronization mechanisms in details. We are going to s ...

  7. 【初学python】使用python调用monkey测试

    目前公司主要开发安卓平台的APP,平时测试经常需要使用monkey测试,所以尝试了下用python调用monkey,代码如下: import os apk = {'j': 'com.***.test1 ...

  8. 使用python自动生成docker nginx反向代理配置

    由于在测试环境上用docker部署了多个应用,而且他们的端口有的相同,有的又不相同,数量也比较多,在使用jenkins发版本的时候,不好配置,于是想要写一个脚本,能在docker 容器创建.停止的时候 ...

  9. Python标准模块--threading

    1 模块简介 threading模块在Python1.5.2中首次引入,是低级thread模块的一个增强版.threading模块让线程使用起来更加容易,允许程序同一时间运行多个操作. 不过请注意,P ...

随机推荐

  1. pandas功能使用rename, reindex, set_index 详解

    pandas rename 功能 在使用 pandas 的过程中经常会用到修改列名称的问题,会用到 rename 或者 reindex 等功能,每次都需要去查文档 当然经常也可以使用 df.colum ...

  2. PHP删除数组中空值的方法

  3. Nestjs OpenAPI(Swagger)

    官方文档 用来描述api

  4. mui 普通新闻文字列表 图文新闻列表

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  5. Django1.11加载静态文件

    Django版本1.11网站通常需要js,css,images等文件,在Django中,我们把这些文件称为“静态文件”(static files).Django提供django.contrib.sta ...

  6. JVM内存布局

    1. 概述 对于从事c和c++程序开发的开发人员来说,在内存管理领域,他们既拥有最高权力的”皇帝“又是从事最基础工作的”劳动人民“---既拥有每个对象的”所有权“,又担负着每个对象开始到终结的维护责任 ...

  7. win10系统安装了多个版本的JDK如何切换

    本人这台笔记本前面装了jdk8,现在准备用jdk7,我安装好了jdk7:把系统变量中的JAVA_HOME 改为 D:\java\jdk\jdk7\jdk1.7.0_67,Path下添加如下变量,记得加 ...

  8. Spark入门到精通--(第二节)Scala编程详解基础语法

    Scala是什么? Scala是以实现scaleable language为初衷设计出来的一门语言.官方中,称它是object-oriented language和functional languag ...

  9. numactl 修改 非统一内存访问架构 NUMA(Non Uniform Memory Access Architecture)模式

    当今数据计算领域的主要应用程序和模型可大致分为三大类: (1)联机事务处理(OLTP). (2)决策支持系统(DSS) (3)企业信息通讯(BusinessCommunications) 上述三类系统 ...

  10. python练习题-day16

    1.用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb name=["alex","wupeiqi","yuanhao" ...