threading.Event可以使一个线程等待其他线程的通知。其内置了一个标志,初始值为False。线程通过wait()方法进入等待状态,直到另一个线程调用set()方法将内置标志设置为True时,Event通知所有等待状态的线程恢复运行。还可以通过isSet()方法查询Envent对象内置状态的当前值。
import threading
import random
import time
class MyThread(threading.Thread):
def __init__(self,threadName,event):
threading.Thread.__init__(self,name=threadName)
self.threadEvent=event
def run(self):
print '%s is ready'%self.name
self.threadEvent.wait()
print "%s run"%self.name
sinal=threading.Event()
for i in range(10):
t=MyThread(str(i),sinal)
t.start()
sinal.set()
线程的合并:
python的Thread类中还提供了join()方法,使得一个线程可以等待另一个线程执行结束后再继续运行。这个方法还可以设定一个timeout参数,避免无休止的等待。因为两个线程顺序完成,看起来象一个线程,所以称为线程的合并。一个例子:
import threading
import random
import time
class MyThread(threading.Thread):
def run(self):
wait_time=random.randrange(1,10)
print '%s will wait %d seconds'%(self.name,wait_time)
time.sleep(wait_time)
print "%s finished"%self.name
if __name__=='__main__':
thrads=[]
for i in range(5):
t=MyThread()
t.start()
threads.append(t)
print 'main thread is waiting for exit....'
for t in threads:
t.join(1)
print 'main thread finished'
后台线程:
import threading
import random
import time
class MyThread(threading.Thread):
def run(self):
wait_time=random.randrange(1,10)
print '%s will wait %d seconds'%(self.name,wait_time)
time.sleep(wait_time)
print '%s finished'%self.name
if __name__=='__main__':
print 'main thread is waitting for exit..'
for i in range(5):
t=MyThread()
t.setDaemon(True)
t.start()
print 'main thread finished'