python 线程之 threading(三)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 线程之 threading(三)相关的知识,希望对你有一定的参考价值。

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对象和条件标记类似,允许线程等待某个事件发生,如果事件没有被设置而线程在登载该事件发生,那么线程就会被阻塞,直到事件被设置为止。当线程设置了这个事件是,就会唤醒所有等待的线程。

技术分享
 1 from threading import Thread, Event
 2 import time
 3 
 4 
 5 def countdown(n, start_evt):
 6     start_evt.wait()
 7     print(countdown start)
 8     while n > 1:
 9         print(T-minus, n)
10         n -= 1
11         time.sleep(3)
12 
13 def countUp(n, start_evt):
14     start_evt.wait()
15     print(countup start)
16     while n < 100:
17         print(T-minus, n)
18         n += 1
19         time.sleep(3)
20 
21 
22 # Create the event object that will be used to signal starting
23 start_evt = Event()
24 
25 print(launching countdown)
26 t = Thread(target=countdown, args=(10, start_evt))
27 t.start()
28 t2 = Thread(target=countUp, args=(1, start_evt))
29 t2.start()
30 print(threads to started)
31 start_evt.set()
View Code

代码的运行结果是:

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

 




以上是关于python 线程之 threading(三)的主要内容,如果未能解决你的问题,请参考以下文章

Python常用模块 之threading和Thread模块 第三阶段 线程池

python笔记9-多线程Threading之阻塞(join)和守护线程(setDaemon)

python笔记7-多线程threading之函数式

第49天:Python 多线程之 threading 模块

第49天:Python 多线程之 threading 模块

python多线程之threading模块