1. 程式人生 > 實用技巧 >訊號量、event事件和執行緒queue

訊號量、event事件和執行緒queue

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()
    
# for i in range(10): t=Thread(target=car,args=(i,)) t.start()
View Code
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)
# 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())
View Code