1. Class Event
  2. {
  3. __init__(self)
  4.  
  5. clear(self)
  6.  
  7. is_set(self)
  8.  
  9. set(self)
  10.  
  11. wait(self,timeout=None)
  12.  
  13. }

is_set(self)

if and only if 内部标志为真时返回Ture

wait(self,timeout=N)

如果内部标志=Ture,立即返回
如果内部标志=False,就阻塞(等待),直到另一个thread调用了set()方法,它的内部标志变为了Ture
如果设置了timeout,则至多等待N秒时间

set(self)

将内部变量设置为True。所有等待它成真的线程都被唤醒(awake)了

clear(self)

将内部变量设置为False

  1. class TestThread(threading.Thread):
  2. def __init__(self,name,event):
  3. super(TestThread,self).__init__()
  4. self.name=name
  5. self.event=event
  6.  
  7. def run(self):
  8. logging.info("{} start".format(self.name))
  9. self.event.wait()
  10. logging.info("{} finished".format(self.name))
  11.  
  12. def main():
  13. event=threading.Event()
  14.  
  15. threads=[]
  16.  
  17. for i in range(1,4):
  18. threads.append(TestThread(str(i),event))
  19.  
  20. logging.info("main thread start")
  21.  
  22. event.clear()
  23.  
  24. for thread in threads:
  25. thread.start()
  26.  
  27. logging.info("sleep 5s...")
  28. time.sleep(5)
  29. logging.info("now awake other threads")
  30. event.set()
  31.  
  32. if __name__ == '__main__':
  33. main()
  34.  
  35. '''
  36. 19:43:50 [MainThread] main thread start
  37. 19:43:50 [1] 1 start
  38. 19:43:50 [2] 2 start
  39. 19:43:50 [3] 3 start
  40. 19:43:50 [MainThread] sleep 5s...
  41. 19:43:55 [MainThread] now awake other threads
  42. 19:43:55 [1] 1 finished
  43. 19:43:55 [2] 2 finished
  44. 19:43:55 [3] 3 finished
  45. '''
  1. class TestThread(threading.Thread):
  2. def __init__(self,name,event):
  3. super(TestThread,self).__init__()
  4. self.name=name
  5. self.event=event
  6.  
  7. def run(self):
  8. logging.info("{} start".format(self.name))
  9. self.event.wait(5)
  10. logging.info("{} finished".format(self.name))
  11.  
  12. def main():
  13. event=threading.Event()
  14.  
  15. threads=[]
  16.  
  17. for i in range(1,4):
  18. threads.append(TestThread(str(i),event))
  19.  
  20. logging.info("main thread start")
  21.  
  22. event.clear()
  23.  
  24. for thread in threads:
  25. thread.start()
  26.  
  27. logging.info("sleep 10s...")
  28. time.sleep(10)
  29. logging.info("10s过去了")
  30. event.set()
  31.  
  32. if __name__ == '__main__':
  33. main()
  34.  
  35. '''
  36. 19:48:36 [MainThread] main thread start
  37. 19:48:36 [1] 1 start
  38. 19:48:36 [2] 2 start
  39. 19:48:36 [3] 3 start
  40. 19:48:36 [MainThread] sleep 10s...
  41. 19:48:41 [1] 1 finished
  42. 19:48:41 [2] 2 finished
  43. 19:48:41 [3] 3 finished
  44. 19:48:46 [MainThread] 10s过去了
  45. '''

《Python:super没那么简单》

《你不知道的super》

[PY3]——threading.Event的更多相关文章

  1. threading event

    #!usr/bin/env python 2 #coding: utf-8 3 #Author: Andy 4 5 import threading 6 import time 7 8 def pro ...

  2. Python多线程的threading Event

    Python threading模块提供Event对象用于线程间通信.它提供了一组.拆除.等待用于线程间通信的其他方法. event它是沟通中最简单的一个过程之中,一个线程产生一个信号,号.Pytho ...

  3. {Python之线程} 一 背景知识 二 线程与进程的关系 三 线程的特点 四 线程的实际应用场景 五 内存中的线程 六 用户级线程和内核级线程(了解) 七 python与线程 八 Threading模块 九 锁 十 信号量 十一 事件Event 十二 条件Condition(了解) 十三 定时器

    Python之线程 线程 本节目录 一 背景知识 二 线程与进程的关系 三 线程的特点 四 线程的实际应用场景 五 内存中的线程 六 用户级线程和内核级线程(了解) 七 python与线程 八 Thr ...

  4. pythonl练习笔记——threading线程中的事件Event

    1 事件Event 使用方法:e = threading.Event() Event对象主要用于线程间通信,确切地说是用于主线程控制其他线程的执行. Event事件提供了三个方法:wait等待.cle ...

  5. 人生苦短之我用Python篇(线程/进程、threading模块:全局解释器锁gil/信号量/Event、)

    线程: 有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.是一串指令的集合.线程是程序中一个单一的顺序控制流程.进程内一个相对独立的.可调度的执行单元,是 ...

  6. python第五十一天----线程,Event,队列

    进程与线程的区别: 线程==指令集,进程==资源集  (线程集) 1.同一个进程中的线程共享内存空间,进程与进程之间是独立的 2.同一个进程中的线程是可以直接通讯交流的,进程与间通讯必需通过一个中间的 ...

  7. Python标准模块--threading

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

  8. python 线程之 threading(三)

    python 线程之 threading(一)http://www.cnblogs.com/someoneHan/p/6204640.html python 线程之 threading(二)http: ...

  9. python成长之路【第十一篇】:网络编程之线程threading模块

    一.threading模块介绍 threading 模块建立在 _thread 模块之上.thread 模块以低级.原始的方式来处理和控制线程,而 threading 模块通过对 thread 进行二 ...

随机推荐

  1. C++互斥器:Mutex

    互斥器的功能是,使多个线程和谐工作.同一时间内,只能有一个线程得到互斥对象,并获得资源操作权限,那么如果同一时间其他线程也想去操作资源,此时就会因为Mutex未处于激发状态,而无奈的等待…这时候,线程 ...

  2. Excel 帮助无法正常工作的解决方法

    Excel 中出现错误:帮助无法正常工作,但您仍可以转到 Office.com,以获得最新和最好的文章.视频和培训课程. 英文消息:Help isn't working, but you can st ...

  3. MVC下使用Areas

    (一) 为什么要分离 MVC项目各部分职责比较清晰,相比较ASP.NET Webform而言,MVC项目的业务逻辑和页面展现较好地分离开来,这样的做法有许多优点,比如可测试,易扩展等等.但是在实际的开 ...

  4. Win(Phone)10开发第(1)弹,桌面和手机的扩展API,还我后退键

    喜大普奔的win10 uap开发预览版终于出了,这次更新跟8.1的变化不是很大,但是将原本win8.1和wp8.1uap的分项目的形式,改为了整合成一个项目,经过一次编译打包成一个appx包,实现了无 ...

  5. C博客作业03—函数

    1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1 学习体会 知道了程序的模块化设计可使程序结构清晰,简化复杂问题,解决代码重复问题 学会使用自定义函数简化主函数,使代码 ...

  6. Flask 语音分析

    1. 安装api      百度组件 pip install baidu-aip 2.登录百度ai账号 ,建立一个账号 http://ai.baidu.com/ from aip import Aip ...

  7. day85 ModuleForm Form组件

    1 forms组件与modelform组件 forms组件: https://www.cnblogs.com/yuanchenqi/articles/9036474.htmlmodelForm组件:h ...

  8. 虚拟安装centos后无法上网、DNS无法解析问题解决

    1.保证拟机ip和VMnet8的ip在同一网段内 2.虚拟机网关和VMnet8相同

  9. BZOJ 5395--[Ynoi2016]谁的梦(STL&容斥)

    5395: [Ynoi2016]谁的梦 Time Limit: 80 Sec  Memory Limit: 128 MBSubmit: 22  Solved: 7[Submit][Status][Di ...

  10. 二,PHP会话机制---session的基本使用

    1,思考:登录网站后,在每个网页都能拿到用户信息 (1) 使用超链接传递用户名,这样太繁琐了,不建议使用 . (2) 使用数据库,每打开一个页面都查询一次用户信息表,这样网页加载速度变慢,用户体验变差 ...