event = threading.Event()   #创建同步对象

event.wait()     #同步对象等待状态

event.set()  #同步对象设置True
event.clear()    #清除同步对象

event.wait()  --->捕捉到  event.set() ---> 继续执行   --->event.clear()  清除对象

例子:

import threading,time
class Boss(threading.Thread):
def run(self):             
print("BOSS:今晚大家都要加班到22:00。") #7 假如继续运行到这了
print(event.isSet()) #8 打印下当前设定状态False
event.set()                #9 设置为True
time.sleep(5)             #12 睡眠5秒
print("BOSS:<22:00>可以下班了。") #16 打印此消息
print(event.isSet())
event.set()                #17 设置event.set()为True状态,让线程中的event.wait()中捕捉
class Worker(threading.Thread): #5 假如运行到这
def run(self):
event.wait()          #6 event.wait()等待event.set() 这时候这里是等待状态后面不执行 #11 此时5个Worker线程会捕捉到event.set()为True状态,会继续开始接着后面执行
print("Worker:哎……命苦啊!") #12 5个线程机会同时打印这个消息
time.sleep(1)          #13 5个线程开始睡眠1 
event.clear()         #14 清除event.set()状态 此时event.set()为 False
event.wait()          #15 event.wait()等待event.set()  这时候这里是等待状态后面不执行 #18 捕捉到event.set()为True状态,继续开始接着后面执行
        print("Worker:OhYeah!")    
if __name__=="__main__":
event=threading.Event() #1 创建对象
threads=[]
for i in range(5):    #2 5 Worker对象放入到列表
threads.append(Worker())
threads.append(Boss())  #3 Boss对象放入列表
for t in threads:
t.start()       #4 运行线程对象(列表里面的对象先后谁执行,不知道)
for t in threads:
t.join() 结果:

  BOSS:今晚大家都要加班到22:00。
  False
  Worker:哎……命苦啊!
  Worker:哎……命苦啊!
  Worker:哎……命苦啊!
  Worker:哎……命苦啊!
  Worker:哎……命苦啊!
  BOSS:<22:00>可以下班了。
  False
  Worker:OhYeah!
  Worker:OhYeah!
  Worker:OhYeah!
  Worker:OhYeah!
  Worker:OhYeah!

  

同步对象(同步条件Event)的更多相关文章

  1. Python学习---同步条件event/队列queue1223

    写在前面: 在使用这些共享API的时候,我们要注意以下几点: 在UNIX平台上,当某个进程终结之后,该进程需要被其父进程调用wait,否则进程成为僵尸进程(Zombie).所以,有必要对每个Proce ...

  2. Day12- Python基础12 线程、GIL、Lock锁、RLock锁、Semaphore锁、同步条件event

    http://www.cnblogs.com/yuanchenqi/articles/6248025.html  博客地址 本节内容: 1:进程和线程的说明 2:线程的两种调用方式 3:threadi ...

  3. 并发、并行、同步、异步、全局解释锁GIL、同步锁Lock、死锁、递归锁、同步对象/条件、信号量、队列、生产者消费者、多进程模块、进程的调用、Process类、

    并发:是指系统具有处理多个任务/动作的能力. 并行:是指系统具有同时处理多个任务/动作的能力. 并行是并发的子集. 同步:当进程执行到一个IO(等待外部数据)的时候. 异步:当进程执行到一个IO不等到 ...

  4. Linux的线程同步对象:互斥量Mutex,读写锁,条件变量

        进程是Linux资源分配的对象,Linux会为进程分配虚拟内存(4G)和文件句柄等 资源,是一个静态的概念.线程是CPU调度的对象,是一个动态的概念.一个进程之中至少包含有一个或者多个线程.这 ...

  5. [转]同步对象Event的用法

    同步对象Event的用法  首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,线程锁定方面.  CreateEvent函数功能描述:创建或打开一个命名的或无名的事 ...

  6. 多线程 同步对象 event 简单实例 &进程间通信

    多线程 同步对象event import threading,time class Boss(threading.Thread): def run(self): print("BOSS:今晚 ...

  7. c++ 跨平台线程同步对象那些事儿——基于 ace

    前言 ACE (Adaptive Communication Environment) 是早年间很火的一个 c++ 开源通讯框架,当时 c++ 的库比较少,以至于谈 c++ 网络通讯就绕不开 ACE, ...

  8. C++多线程同步之事件(Event)

    原文链接:http://blog.csdn.net/olansefengye1/article/details/53291074 一.事件(Event)原理解析 1.线程同步Event,主要用于线程间 ...

  9. 基于Python的SQL Server数据库对象同步轻量级实现

    缘由 日常工作中经常遇到类似的问题:把某个服务器上的某些指定的表同步到另外一台服务器.类似需求用SSIS或者其他ETL工作很容易实现,比如用SSIS的话就可以,但会存在相当一部分反复的手工操作.建源的 ...

随机推荐

  1. 2017年3月30日15:00:19 fq以后的以后 动态代理

    代理与继承,组合不同的是,继承是继承父类特性,组合是拼装组合类的特性,代理是使用代理类的指定方法并可以做自定义. 静态类是应用单个类,当代理的类数量较多时可用动态代理,动态代理在概念上很好理解 htt ...

  2. mail语法

    在Linux系统下mail命令的用法 在Linux系统下mail命令的测试 1. 最简单的一个例子: mail -s test admin@aispider.com 这条命令的结果是发一封标题为tes ...

  3. Java学习笔记36(jdbc快速入门)

    JDBC: Java DataBase Connectivity 是java程序连接存取数据库的应用程序接口 (是sun公司的程序员定义的一套操作数据库的规则,然后下面的各个公司如:mysql,sql ...

  4. django 问题总结

    1.更新了pip之后还提示更新 // 卸载 pip uninstall pip // 重新安装 easy_install pip pip -V 2.时间比当前时间少8小时问题 // 设置setting ...

  5. echarts地图散点高亮弹框制作

    效果图如下: 实现大致思路: 引入echarts最新版本,还有china.json,以及地级市坐标,(因为产品需求中不考虑省份,只考虑各个地级市),echarts官网已经不让下载地图了,网上很多地级市 ...

  6. 网络编程 多线程/socketserver模块/ threading.local

    线程:进程中负责程序执行的执行单元. 多线程:在1个进程中存在多个线程. 进程只是用来把资源集中在一起,而线程才是cpu上的执行单位. 每个进程都会默认有一个控制线程也叫作主线程. 进程之间是竞争关系 ...

  7. PyCharm:ModuleNotFoundError: No module named 'selenium'

    Mac安装PyCharm后,将已有工程导入,之前使用Mac终端执行脚本时正常,现在报错ModuleNotFoundError: No module named 'selenium',解决方法是在PyC ...

  8. python 使用gevent模块实现手动挡切换多协程。

    from greenlet import greenlet def test1(): print(12) g2.switch()#切换到协程g2执行,保存执行状态 print(23) g2.switc ...

  9. 优雅的使用列表推导式和lambda

    按照条件过滤列表中的数据 过滤出列表中以"KLL","KBB","KHH"开头的数据 1.使用列表推导式 [orderNoOrReturnN ...

  10. Java_IO异常处理方式_入门小笔记

    package IO; import java.io.FileWriter; import java.io.IOException; /** * IO异常处理方式 */ class FileWrite ...