Queue:FIFO 即first in first out 先進先出
LifoQueue:LIFO 即last in first out 後進先出
PriorityQueue:優先隊列,級別越低,越優先
deque:雙邊隊列
導入三種隊列,包
from queue import Queue,LifoQueue,PriorityQueue
Queue 先進先出隊列:html
#基本FIFO隊列 先進先出 FIFO即First in First Out,先進先出 #maxsize設置隊列中,數據上限,小於或等於0則不限制,容器中大於這個數則阻塞,直到隊列中的數據被消掉
q = Queue(maxsize=0) #寫入隊列數據
q.put(0) q.put(1) q.put(2) #輸出當前隊列全部數據
print(q.queue) #刪除隊列數據,並返回該數據
q.get() #輸也全部隊列數據
print(q.queue) # 輸出: # deque([0, 1, 2]) # deque([1, 2])
LifoOueue 後進先出隊列:編程
#LIFO即Last in First Out,後進先出。與棧的相似,使用也很簡單,maxsize用法同上
lq = LifoQueue(maxsize=0) #隊列寫入數據
lq.put(0) lq.put(1) lq.put(2) #輸出隊列全部數據
print(lq.queue) #刪除隊尾數據,並返回該數據
lq.get() #輸出隊列全部數據
print(lq.queue) #輸出: # [0, 1, 2] # [0, 1]
優先隊列:安全
# 存儲數據時可設置優先級的隊列 # 優先級設置數越小等級越高 pq = PriorityQueue(maxsize=0) #寫入隊列,設置優先級 pq.put((9,'a')) pq.put((7,'c')) pq.put((1,'d')) #輸出隊例所有數據 print(pq.queue) #取隊例數據,能夠看到,是按優先級取的。 pq.get() pq.get() print(pq.queue)
#輸出:
[(9, 'a')]
雙邊隊列:併發
#雙邊隊列 dq = deque(['a','b']) #增長數據到隊尾 dq.append('c') #增長數據到隊左 dq.appendleft('d') #輸出隊列全部數據 print(dq) #移除隊尾,並返回 print(dq.pop()) #移除隊左,並返回 print(dq.popleft())
#輸出:
deque(['d', 'a', 'b', 'c'])
c
d
生產消費模型:app
#生產消費模型
qq = Queue(maxsize=10) def product(name): count = 1
while True: q.put('步槍{}'.format(count)) print('{}生產步槍{}支'.format(name,count)) count+=1 time.sleep(0.3) def cousume(name): while True: print('{}裝備了{}'.format(name,q.get())) time.sleep(0.3) q.task_done() #部隊線程
p = threading.Thread(target=product,args=('張三',)) k = threading.Thread(target=cousume,args=('李四',)) w = threading.Thread(target=cousume,args=('王五',)) p.start() k.start() w.start()