同步對象Event
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()