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. 奇异值分解(SVD)与在降维中的应用

    奇异值分解(Singular Value Decomposition,SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域.是很多机器 ...

  2. jsoncpp

    1.y.z is built with C++11. 0.y.z can be used with older compilers 1.y.z 版本是基于C++11的:0.y.z 是基于老版本的,为了 ...

  3. 2017-9-3模拟赛T2 取数(win)

    题目 题解 做法1: 直接暴力枚举每个数是否被选出,计算平均数-中位数,并与当前答案进行比较.复杂度O(2^n),能过60%的数据. 做法2: 将每个数排序后枚举中位数. 首先,取奇数个数一定更优.容 ...

  4. 改善Python程序的条条建议

    1:引论   建议1.理解Pythonic概念—-详见Python中的<Python之禅> 建议2.编写Pythonic代码 避免不规范代码,比如只用大小写区分变量.使用容易混淆的变量名. ...

  5. 剑指Offer 53. 表示数值的字符串 (字符串)

    题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100","5e2","-123","3.1 ...

  6. C# 异步通信 网络聊天程序开发 局域网聊天室开发

    Prepare 本文将使用一个NuGet公开的组件技术来实现一个局域网聊天程序,利用组件提供的高性能异步网络机制实现,免去了手动编写底层的困扰,易于二次开发,扩展自己的功能. 在Visual Stud ...

  7. 关于WebAPI跨域踩到的一点坑

    最近在尝试前后端分离的WebAPI+AngularJS方案,在率先处理授权的时候,踩到了一点WebAPI跨域的坑,其实严格意义上来说也不算是坑吧,只是我自己对WebAPI不熟悉而已,这里我与大家分享一 ...

  8. Github Page 搜索工具

    轮子 今天造了一个轮子 -- Github Page搜索工具 https://man-ing.com/github. 什么是Github Page 直接从GitHub存储库托管.只需编辑,推送,更改即 ...

  9. Python全栈之路----常用模块----包及跨模块导入

    当你的模块文件越来越多,就需要对模块文件进行划分,比如把负责跟数据库交互的都放一个文件夹,把与页面交互相互的放入一个文件夹. 像上面这样,一个文件夹管理多个模块文件,这个文件夹就被称为包. 那不同包之 ...

  10. switch留个爪,之后还需要再研究下

    public class SwitchDemo { public static void main (String [] args) { for(int i = 0; i < 10; i++) ...