Python线程event
Posted ❦邪恶毅小人❦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python线程event相关的知识,希望对你有一定的参考价值。
python线程的事件用于主线程控制其他线程的执行,事件主要提供了三个方法wait、clear、set
事件处理的机制:全局定义了一个“Flag”,如果“Flag”值为 False,那么当程序执行 event.wait 方法时就会阻塞,如果“Flag”值为True,那么event.wait 方法时便不再阻塞。
- clear:将“Flag”设置为False
- set:将“Flag”设置为True
用 threading.Event 实现线程间通信
使用threading.Event可以使一个线程等待其他线程的通知,我们把这个Event传递到线程对象中,
Event默认内置了一个标志,初始值为False。
一旦该线程通过wait()方法进入等待状态,直到另一个线程调用该Event的set()方法将内置标志设置为True时,
该Event会通知所有等待状态的线程恢复运行。
import threading
import time
class MyThread(threading.Thread):
def __init__(self, signal):
threading.Thread.__init__(self)
# 初始化
self.singal = signal
def run(self):
print "I am %s,I will sleep ..."%self.name
# 进入等待状态
self.singal.wait()
print "I am %s, I awake..." %self.name
if __name__ == "__main__":
# 初始 为 False
singal = threading.Event()
for t in range(0, 3):
thread = MyThread(singal)
thread.start()
print "main thread sleep 3 seconds... "
time.sleep(3)
# 唤醒含有signal, 处于等待状态的线程
singal.set()
import threading def do(event): print ‘start‘ event.wait() print ‘execute‘ event_obj = threading.Event() for i in range(10): t = threading.Thread(target=do, args=(event_obj,)) t.start() event_obj.clear() #继续阻塞 inp = raw_input(‘input:‘) if inp == ‘true‘: event_obj.set() #唤醒
以上是关于Python线程event的主要内容,如果未能解决你的问题,请参考以下文章
python lock, semaphore, event实现线程同步