Python queue隊列原理與應用案例分析
本文實例講述了Python queue隊列原理與應用。分享給大家供大家參考,具體如下:
作用:
解耦:使程序直接實現(xiàn)松耦合,修改一個函數(shù),不會有串聯(lián)關(guān)系。
提高處理效率:FIFO = 現(xiàn)進先出,LIFO?。健『笕胂瘸?。
隊列:
隊列可以并發(fā)的派多個線程,對排列的線程處理,并切每個需要處理線程只需要將請求的數(shù)據(jù)放入隊列容器的內(nèi)存中,線程不需要等待,當排列完畢處理完數(shù)據(jù)后,線程在準時來取數(shù)據(jù)即可。請求數(shù)據(jù)的線程只與這個隊列容器存在關(guān)系,處理數(shù)據(jù)的線程down掉不會影響到請求數(shù)據(jù)的線程,隊列會派給其他線程處理這分數(shù)據(jù),它實現(xiàn)了解耦,提高效率。隊列內(nèi)會有一個有順序的容器,列表與這個容器是有區(qū)別的,列表中數(shù)據(jù)雖然是排列的,但數(shù)據(jù)被取走后還會保留,而隊列中這個容器的數(shù)據(jù)被取后將不會保留。當必須在多個線程之間安全地交換信息時,隊列在線程編程中特別有用。
參數(shù)介紹:
# 先入先出 maxsize 可設置大小,設置block=False拋異常 class queue.Queue(maxsize=0) # 后進先出 class queue.LifoQueue(maxsize=0) # 存儲數(shù)據(jù)時可設置優(yōu)先級的隊列 # 優(yōu)先級設置數(shù)越小等級越高 class queue.PriorityQueue(maxsize=0) # 放入數(shù)據(jù) Queue.put(item, block=True, timeout=None) # 取出數(shù)據(jù) #沒有數(shù)據(jù)將會等待 Queue.get(block=True, timeout=None) # 如果1秒后沒取到數(shù)據(jù)就退出 Queue.get(timeout = 1) # 取數(shù)據(jù),如果沒數(shù)據(jù)拋queue.Empty異常 Queue.get_nowait() # 查看隊列大小 Queue.qsize() # 返回True,如果空 Queue.empty() #return True if empty # 設置隊列大小 Queue.full() # 后續(xù)調(diào)用告訴隊列,任務的處理是完整的。 Queue.task_done()
生產(chǎn)者消費者模型:
import threading,time import queue # 最多存入10個 q = queue.Queue(maxsize=10) def producer(name): count = 1 while True: # 生產(chǎn)一塊骨頭 q.put("骨頭 %s" % count ) print("生產(chǎn)了骨頭",count) count +=1 time.sleep(0.3) def consumer(name): while True: print("%s 取到[%s] 并且吃了它" %(name, q.get())) time.sleep(1) # 告知這個任務執(zhí)行完了 q.task_done() # 生成線程 p = threading.Thread(target=producer,args=("德國骨科",)) c = threading.Thread(target=consumer,args=("陳狗二",)) d = threading.Thread(target=consumer,args=("呂特黑",)) # 執(zhí)行線程 p.start() c.start() d.start()
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python加密解密算法與技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程》
希望本文所述對大家Python程序設計有所幫助。
相關(guān)文章
Python打包后的exe還原成.py的實現(xiàn)步驟
本文主要介紹了Python打包后的exe還原成.py的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02keras-siamese用自己的數(shù)據(jù)集實現(xiàn)詳解
這篇文章主要介紹了keras-siamese用自己的數(shù)據(jù)集實現(xiàn)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06http通過StreamingHttpResponse完成連續(xù)的數(shù)據(jù)傳輸長鏈接方式
這篇文章主要介紹了http通過StreamingHttpResponse完成連續(xù)的數(shù)據(jù)傳輸長鏈接方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02如何使用Python處理HDF格式數(shù)據(jù)及可視化問題
這篇文章主要介紹了如何使用Python處理HDF格式數(shù)據(jù)及可視化問題,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06利用Python封裝MySQLHelper類實現(xiàn)數(shù)據(jù)庫的增刪改查功能
Python 連接 MySQL 的方法有很多,常用的有 pymysql 和 mysql-connector-python 兩種庫,本文主要介紹了如何封裝一個MySQLHelper類,實現(xiàn)對數(shù)據(jù)庫的增刪改查功能,感興趣的可以了解一下2023-06-06Python使用pyyaml模塊處理yaml數(shù)據(jù)
這篇文章主要介紹了Python使用pyyaml模塊處理yaml數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-04-04