隊列:
import queue
q = queue.Queue() #先入先出
print(q.empty()) #判斷是否為空,空返回True
q.put("d1")
q.put("d2")
q.put("d3")
print(q.full()) #判斷是否滿,滿返回True
print(q.get()) #d1
print(q.get()) #d2
print(q.get()) #d3
print(q.get(timeout=1)) #阻塞 可以使用q.get(timeout = 1)設置超時來解決阻塞問題,拋出queue.Empty異常
print(q.get_nowait()) #接上一行的例子,還可以設置不要等待,沒有數據即刻拋出異常
print(q.qsize()) #或者使用if判斷qsize是否等於0
print(q.get(block=False)) #block參數False也可以解決程序阻塞問題
#設置具有長度限制的隊列
q = queue.Queue(maxsize=3) #長度為3
q.put(1)
q.put(2)
q.put(3)
q.put(4, block=False) #這里程序又阻塞了,所以可以使用block,timeout參數解決阻塞問題,異常queue.Full
q = queue.PriorityQueue() #設置優先級隊列,數字小的優先級高
q.put((1, "King"))
q.put((-1, "Jeson"))
q.put((10, "Tim"))
q.put((5, "Mike"))
# q = queue.LifoQueue() #設置后入先出隊列
# q.put(1)
# q.put(2)
# q.put(3)
# print(q.get())
# print(q.get())
# print(q.get())
生產者消費者模型:
import threading
import time
import queue
q = queue.Queue(maxsize=10)
def producer(name): #生產者
count = 1
while True:
q.put("骨頭%s" % count)
print("生產了骨頭", count)
count += 1
time.sleep(0.5)
def consumer(name): #消費者
while True:
print("[%s]取到[%s]並且吃了它..." % (name, q.get()))
time.sleep(1)
p = threading.Thread(target=producer, args=("Tim",))
c1 = threading.Thread(target=consumer, args=("King",))
c2 = threading.Thread(target=consumer, args=("Wang",))
p.start()
c1.start()
c2.start()
