Python queue佇列原理與應用案例分析
阿新 • • 發佈:2020-01-09
本文例項講述了Python queue佇列原理與應用。分享給大家供大家參考,具體如下:
作用:
解耦:使程式直接實現鬆耦合,修改一個函式,不會有串聯關係。
提高處理效率:FIFO = 現進先出,LIFO = 後入先出。
佇列:
佇列可以併發的派多個執行緒,對排列的執行緒處理,並切每個需要處理執行緒只需要將請求的資料放入佇列容器的記憶體中,執行緒不需要等待,當排列完畢處理完資料後,執行緒在準時來取資料即可。請求資料的執行緒只與這個佇列容器存在關係,處理資料的執行緒down掉不會影響到請求資料的執行緒,佇列會派給其他執行緒處理這分資料,它實現瞭解耦,提高效率。佇列內會有一個有順序的容器,列表與這個容器是有區別的,列表中資料雖然是排列的,但資料被取走後還會保留,而佇列中這個容器的資料被取後將不會保留。當必須在多個執行緒之間安全地交換資訊時,佇列線上程程式設計中特別有用。
引數介紹:
# 先入先出 maxsize 可設定大小,設定block=False拋異常 class queue.Queue(maxsize=0) # 後進先出 class queue.LifoQueue(maxsize=0) # 儲存資料時可設定優先順序的佇列 # 優先順序設定數越小等級越高 class queue.PriorityQueue(maxsize=0) # 放入資料 Queue.put(item,block=True,timeout=None) # 取出資料 #沒有資料將會等待 Queue.get(block=True,timeout=None) # 如果1秒後沒取到資料就退出 Queue.get(timeout = 1) # 取資料,如果沒資料拋queue.Empty異常 Queue.get_nowait() # 檢視佇列大小 Queue.qsize() # 返回True,如果空 Queue.empty() #return True if empty # 設定佇列大小 Queue.full() # 後續呼叫告訴佇列,任務的處理是完整的。 Queue.task_done()
生產者消費者模型:
import threading,time import queue # 最多存入10個 q = queue.Queue(maxsize=10) def producer(name): count = 1 while True: # 生產一塊骨頭 q.put("骨頭 %s" % count ) print("生產了骨頭",count) count +=1 time.sleep(0.3) def consumer(name): while True: print("%s 取到[%s] 並且吃了它" %(name,q.get())) time.sleep(1) # 告知這個任務執行完了 q.task_done() # 生成執行緒 p = threading.Thread(target=producer,args=("德國骨科",)) c = threading.Thread(target=consumer,args=("陳狗二",)) d = threading.Thread(target=consumer,args=("呂特黑",)) # 執行執行緒 p.start() c.start() d.start()
更多關於Python相關內容感興趣的讀者可檢視本站專題:《Python資料結構與演算法教程》、《Python加密解密演算法與技巧總結》、《Python編碼操作技巧總結》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》及《Python入門與進階經典教程》
希望本文所述對大家Python程式設計有所幫助。