import threading
import time
class Boss(threading.Thread):
def run(self):
print('Boss:加班到<22:00>')
print(event.isSet())#isSet判断event是否已经set
event.set() #对event进行set
time.sleep(5)
print('Boss:<22:00>可以下班了')
event.set()
print(event.isSet())
class Worker(threading.Thread):
def run(self):
event.wait() #wait方法:如果wait前没有对event进行set,则wait会阻塞,若已经set过则会继续运行下面的程序
print('Worker:命苦啊!!!')
time.sleep(1)
event.clear() #对event的状态进行清除,使event变为未set状态
event.wait()
print('Worker:Oh yeah!!!')
if __name__ == '__main__':
event=threading.Event() #同步对象
l=[]
for i in range(5):
l.append(Worker())
l.append(Boss())
for t in l:
t.start()
for t in l:
t.join()
print('ending...')
'''
Boss:加班到<22:00>
False
Worker:命苦啊!!!
Worker:命苦啊!!!
Worker:命苦啊!!!
Worker:命苦啊!!!
Worker:命苦啊!!!
Boss:<22:00>可以下班了
True
Worker:Oh yeah!!!
Worker:Oh yeah!!!
Worker:Oh yeah!!!
Worker:Oh yeah!!!
Worker:Oh yeah!!!
ending...
'''
信号量Semaphore
import threading
import time
class Mythread(threading.Thread):
def run(self):
if semaphore.acquire():
print(self.name)
time.sleep(2)
semaphore.release()
if __name__ == '__main__':
#信号量用来控制线程的并发数,acquire时计数器-1,release时计数器+1,计数器为0时,acquire将阻塞
semaphore=threading.Semaphore(5)
for i in range(100):
t=Mythread()
t.start()