event.isSet():返回event的状态值;
event.wait():如果 event.isSet()==False将阻塞线程;
event.set(): 设置event的状态值为True,所有阻塞池的线程激活进入就绪状态, 等待操作系统调度;
event.clear():恢复event的状态值为False。
import time
from threading import Thread, Event
event = Event()
# event.wait()
# event.set()
def student(name):
print('学生%s 正在听课' % name)
event.wait(2)
print('学生%s 课间活动' % name)
def teacher(name):
print('老师%s 正在授课' % name)
time.sleep(7)
event.set()
if __name__ == '__main__':
stu1 = Thread(target=student, args=('allen',))
stu2 = Thread(target=student, args=('wxx',))
stu3 = Thread(target=student, args=('yxx',))
t1 = Thread(target=teacher, args=('winnie',))
stu1.start()
stu2.start()
stu3.start()
t1.start()
结果:
学生allen 正在听课
学生wxx 正在听课
学生yxx 正在听课
老师winnie 正在授课
学生wxx 课间活动
学生allen 课间活动
学生yxx 课间活动
import time
from threading import Thread, Event, currentThread
event = Event()
def conn():
n = 0
while not event.is_set():
if n == 3:
print('%s try too many times' % currentThread().getName())
return
print('%s try %s' % (currentThread().getName(), n))
event.wait(0.5)
n += 1
print('%s is connected' % currentThread().getName())
def check():
print('%s is checking' % currentThread().getName())
time.sleep(5)
event.set()
if __name__ == '__main__':
for i in range(3):
t = Thread(target=conn)
t.start()
t = Thread(target=check)
t.start()
结果:
Thread-1 try 0
Thread-2 try 0
Thread-3 try 0
Thread-4 is checking
Thread-1 try 1
Thread-3 try 1
Thread-2 try 1
Thread-1 try 2
Thread-2 try 2
Thread-3 try 2
Thread-1 try too many times
Thread-3 try too many times
Thread-2 try too many times