python 线程之 threading(三)
2024-10-12 12:46:38
python 线程之 threading(一)http://www.cnblogs.com/someoneHan/p/6204640.html
python 线程之 threading(二)http://www.cnblogs.com/someoneHan/p/6209240.html
使用threading.Thread.is_alive()这个方法可以判断线程是否是存活状态。但是在现有的基础上不能够直到线程什么时候开始,什么时候结束,什么时候被打断。
如果有一个或者多个线程需要在另外的一个线程到达一个确定的点之后才执行下面的操作。这个时候可以使用threading.Event对象。
Event对象和条件标记类似,允许线程等待某个事件发生,如果事件没有被设置而线程在登载该事件发生,那么线程就会被阻塞,直到事件被设置为止。当线程设置了这个事件是,就会唤醒所有等待的线程。
from threading import Thread, Event
import time def countdown(n, start_evt):
start_evt.wait()
print('countdown start')
while n > 1:
print('T-minus', n)
n -= 1
time.sleep(3) def countUp(n, start_evt):
start_evt.wait()
print('countup start')
while n < 100:
print('T-minus', n)
n += 1
time.sleep(3) # Create the event object that will be used to signal starting
start_evt = Event() print('launching countdown')
t = Thread(target=countdown, args=(10, start_evt))
t.start()
t2 = Thread(target=countUp, args=(1, start_evt))
t2.start()
print('threads to started')
start_evt.set()
代码的运行结果是:
threads to started
countdown start
T-minus 10
countup start
threads to started在countdown start和countup start之前运行。因为countdown和countup两个线程设置了Event事件的等待状态,当事件没有被触发的时候他们是不会开始运行的。
注意:
Event最好只用于一次型事件。因为一旦完成了设置Event对象就会被丢弃,如果在继续使用可能会造成问题。如果要重复的通知某个事件可以使用Condition
Event对象的关键特性是唤醒所用等待的线程,如果只希望唤醒一个等待的线程可以使用Semaphore或者Condition
最新文章
- 并行计算提升32K*32K点(32位浮点数) FFT计算速度(4核八线程E3处理器)
- jq判断 复选框是否被选中 亲测可用
- Java-接口练习
- Python ImportError: No module named *****
- 20151222jquery学习笔记--验证注册表单
- 3-jQuery - AJAX get()
- Thrift生成的bean对象,用java内省操作时注意(自己笔记)
- JSP 页面传值方法总结
- Java反射机制(Reflect)解析
- 出错信息:Incorrect string value: &#39;\xE4\xBD\xA0\xE5\xA5\xBD&#39; for column &#39;username&#39;
- torm入门(三)HelloWorld示例
- Linux IO 模型
- Java基础8-多线程;同步代码块
- 【红色警报】XXE 高危漏洞将大面积影响微信支付安全,可能导致系统沦陷,请升级你的系统!
- Netty源码学习笔记
- Unity和Android混合开发
- div和span与块级和行内标签
- 00centos安装
- 解决 jQuery validation插件 valid()方法总是返回true的问题
- 三、Linux学习之命令基本格式篇