Queue 實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模型(實(shí)例講解)
Python中,隊(duì)列是線程間最常用的交換數(shù)據(jù)的形式。
Python Queue模塊有三種隊(duì)列及構(gòu)造函數(shù):
1、Python Queue模塊的FIFO隊(duì)列先進(jìn)先出。 class Queue.Queue(maxsize)
2、LIFO類似于堆,即先進(jìn)后出。 class Queue.LifoQueue(maxsize)
3、還有一種是優(yōu)先級(jí)隊(duì)列級(jí)別越低越先出來。 class Queue.PriorityQueue(maxsize)
此包中的常用方法(q = Queue.Queue()):
q.qsize() 返回隊(duì)列的大小
q.empty() 如果隊(duì)列為空,返回True,反之False
q.full() 如果隊(duì)列滿了,返回True,反之False
q.full 與 maxsize 大小對(duì)應(yīng)
q.get([block[, timeout]]) 獲取隊(duì)列,timeout等待時(shí)間
q.get_nowait() 相當(dāng)q.get(False)
非阻塞 q.put(item) 寫入隊(duì)列,timeout等待時(shí)間
q.put_nowait(item) 相當(dāng)q.put(item, False)
q.task_done() 在完成一項(xiàng)工作之后,q.task_done() 函數(shù)向任務(wù)已經(jīng)完成的隊(duì)列發(fā)送一個(gè)信號(hào)
q.join() 實(shí)際上意味著等到隊(duì)列為空,再執(zhí)行別的操作
# coding=utf-8 import Queue import threading import time q = Queue.Queue(maxsize=10) # 創(chuàng)建一個(gè)隊(duì)列對(duì)象,長(zhǎng)度限制為10,maxsize小于1就代表無限制 def producer(name): count = 1 while True: q.put(count) # 將值放入隊(duì)列中 默認(rèn)block為True,無數(shù)據(jù)時(shí)調(diào)用線程暫停,否則拋出異常 print "%s 生產(chǎn)了包子 %d" % (name, count) count += 1 time.sleep(0.5) def consumer(name): while True: conut_con = q.get() # 從隊(duì)列中取值 默認(rèn)block為True,無數(shù)據(jù)時(shí)調(diào)用線程暫停,否則拋出異常 print "%s 吃掉了包子 %d" % (name, conut_con) time.sleep(2) pro = threading.Thread(target=producer, args=("德源",)) con = threading.Thread(target=consumer, args=("xu",)) con2 = threading.Thread(target=consumer, args=("sx",)) pro.start() con.start() con2.start() # 開啟線程
以上這篇Queue 實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模型(實(shí)例講解)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python-圖片流傳輸?shù)乃悸芳笆纠?url轉(zhuǎn)換二維碼)
這篇文章主要介紹了python-圖片流傳輸?shù)乃悸芳笆纠?url轉(zhuǎn)換二維碼),幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12python scp 批量同步文件的實(shí)現(xiàn)方法
今天小編就為大家分享一篇python scp 批量同步文件的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01Python企業(yè)編碼生成系統(tǒng)總體系統(tǒng)設(shè)計(jì)概述
這篇文章主要介紹了Python企業(yè)編碼生成系統(tǒng)總體系統(tǒng)設(shè)計(jì),簡(jiǎn)單描述了Python企業(yè)編碼生成系統(tǒng)的功能、結(jié)構(gòu)與相關(guān)編碼實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-07-07Python使用zip合并相鄰列表項(xiàng)的方法示例
這篇文章主要介紹了Python使用zip合并相鄰列表項(xiàng)的方法,涉及zip、iter函數(shù)合并相鄰列表項(xiàng)、切片等相關(guān)操作技巧,需要的朋友可以參考下2018-03-03python去重,一個(gè)由dict組成的list的去重示例
今天小編就為大家分享一篇python去重,一個(gè)由dict組成的list的去重示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01python?OpenCV實(shí)現(xiàn)圖像特征匹配示例詳解
這篇文章主要為大家介紹了python?OpenCV實(shí)現(xiàn)圖像特征匹配示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04python實(shí)現(xiàn)根據(jù)文件格式分類
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)根據(jù)文件格式分類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10python多線程實(shí)現(xiàn)同時(shí)執(zhí)行兩個(gè)while循環(huán)的操作
這篇文章主要介紹了python多線程實(shí)現(xiàn)同時(shí)執(zhí)行兩個(gè)while循環(huán)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05