訊號量、event事件和執行緒queue
阿新 • • 發佈:2020-09-10
from threading import Thread,Semaphore import time,random sm=Semaphore(5) def task(name): sm.acquire() print('%s 正在上廁所' %name) time.sleep(random.randint(1,3)) sm.release() if __name__ == '__main__': for i in range(20): t=Thread(target=task,args=('路人%s' %i,)) t.start()View Code
from threading import Thread,Event import time event=Event() def light(): print('紅燈正亮著') time.sleep(3) event.set() #綠燈亮 def car(name): print('車%s正在等綠燈' %name) event.wait() #等燈綠 print('車%s通行' %name) if __name__ == '__main__': # 紅綠燈 t1=Thread(target=light) t1.start()View Code# 車 for i in range(10): t=Thread(target=car,args=(i,)) t.start()
import queue # queue.Queue() #先進先出 # q=queue.Queue(3) # q.put(1) # q.put(2) # q.put(3) # print(q.get()) # print(q.get()) # print(q.get()) # queue.LifoQueue() #後進先出->堆疊 # q=queue.LifoQueue(3) # q.put(1)View Code# q.put(2) # q.put(3) # print(q.get()) # print(q.get()) # print(q.get()) # queue.PriorityQueue() #優先順序 q=queue.PriorityQueue(3) #優先順序,優先順序用數字表示,數字越小優先順序越高 q.put((10,'a')) q.put((-1,'b')) q.put((100,'c')) print(q.get()) print(q.get()) print(q.get())