Threading生產(chǎn)消費(fèi)模型

說(shuō)明:

  • 隊(duì)列:
    隊(duì)列類(lèi)似一條管道厦画,元素put(進(jìn))疮茄,get(出)
    隊(duì)列都是在內(nèi)存中操作滥朱,進(jìn)程退出,隊(duì)列情況力试,且隊(duì)列是阻塞形態(tài)

  • 隊(duì)列分類(lèi):
    python隊(duì)列依賴Queue模塊

隊(duì)列 方式
Queue.Queue 先進(jìn)先出
Queue.LifoQueue 后進(jìn)先出
queue.PriorityQueue 優(yōu)先級(jí)隊(duì)列
queue.deque 雙線隊(duì)列
  • 隊(duì)列方法:
方法 說(shuō)明
put 往隊(duì)列中寫(xiě)入數(shù)據(jù)徙邻,默認(rèn)有block=True和timeout兩個(gè)參數(shù)。當(dāng)block=True時(shí)畸裳,寫(xiě)入是阻塞式的缰犁,阻塞時(shí)間由timeout確定。當(dāng)隊(duì)列q被(其他線程)寫(xiě)滿后怖糊,這段代碼就會(huì)阻塞民鼓,直至其他線程取走數(shù)據(jù)。Queue.put()方法加上 block=False 的參數(shù)蓬抄,即可解決這個(gè)隱蔽的問(wèn)題丰嘉。但要注意,非阻塞方式寫(xiě)隊(duì)列嚷缭,當(dāng)隊(duì)列滿時(shí)會(huì)拋出 exception Queue.Full 的異常
get 取數(shù)據(jù)(默認(rèn)阻塞),Queue.get([block[, timeout]])獲取隊(duì)列饮亏,timeout等待時(shí)間
empty 如果隊(duì)列為空,返回True,反之False
qsize 顯示隊(duì)列中真實(shí)存在的元素長(zhǎng)度
maxsize 最大支持的隊(duì)列長(zhǎng)度,使用時(shí)無(wú)括號(hào)
join 等到隊(duì)列為空阅爽,再執(zhí)行別的操作
task_done 在完成一項(xiàng)工作之后路幸,Queue.task_done()函數(shù)向任務(wù)已經(jīng)完成的隊(duì)列發(fā)送一個(gè)信號(hào)
full 如果隊(duì)列滿了,返回True,反之False

生產(chǎn)消費(fèi)模型

用隊(duì)列將生產(chǎn)者和消費(fèi)者串起來(lái)付翁,使他們無(wú)需知道對(duì)方狀態(tài)简肴,只需要往隊(duì)列中放或取數(shù)據(jù),解決程序解耦

import threading
import Queue
import time
import random

#設(shè)置隊(duì)列長(zhǎng)度為5
q = Queue.Queue(5)

#定義生產(chǎn)者
def Producer(name):
    for i in range(20):
        q.put(i)
        print "Producer %s put %s"(name,i)
        time.sleep(random.randrange(4))

#定義消費(fèi)者
def Consumer(name):
    while True:
        data = q.get()
        print "Consumer %s get %s"(name,i)
        time.sleep(random.randrange(3))

p = threading.Thread(target=Producer,args=("jack",))
c = threading.Thread(target=Consumer,args=("yang",))

p.start()
c.start()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末百侧,一起剝皮案震驚了整個(gè)濱河市砰识,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌佣渴,老刑警劉巖辫狼,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異辛润,居然都是意外死亡膨处,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)砂竖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)真椿,“玉大人,你說(shuō)我怎么就攤上這事乎澄⊥幌酰” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵三圆,是天一觀的道長(zhǎng)狞换。 經(jīng)常有香客問(wèn)我,道長(zhǎng)舟肉,這世上最難降的妖魔是什么修噪? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮路媚,結(jié)果婚禮上黄琼,老公的妹妹穿的比我還像新娘。我一直安慰自己整慎,他們只是感情好脏款,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著裤园,像睡著了一般撤师。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拧揽,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天剃盾,我揣著相機(jī)與錄音,去河邊找鬼淤袜。 笑死痒谴,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的铡羡。 我是一名探鬼主播积蔚,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼烦周!你這毒婦竟也來(lái)了尽爆?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤读慎,失蹤者是張志新(化名)和其女友劉穎教翩,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體贪壳,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡饱亿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闰靴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彪笼。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蚂且,靈堂內(nèi)的尸體忽然破棺而出配猫,到底是詐尸還是另有隱情,我是刑警寧澤杏死,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布泵肄,位于F島的核電站捆交,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏腐巢。R本人自食惡果不足惜品追,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望冯丙。 院中可真熱鬧肉瓦,春花似錦、人聲如沸胃惜。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)船殉。三九已至鲫趁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間利虫,已是汗流浹背饮寞。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留列吼,地道東北人幽崩。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像寞钥,于是被迫代替她去往敵國(guó)和親慌申。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Python的Queue模塊中提供了同步的理郑、線程安全的隊(duì)列類(lèi)蹄溉,包括FIFO(先入先出)隊(duì)列Queue,LIFO(后...
    LittlePy閱讀 508評(píng)論 0 0
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理您炉,服務(wù)發(fā)現(xiàn)柒爵,斷路器,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • @(python)[筆記](méi) 目錄 一、什么是進(jìn)程 1.1 進(jìn)程的概念 進(jìn)程的概念起源于操作系統(tǒng)冀膝,是操作系統(tǒng)最核心的...
    CaiGuangyin閱讀 1,250評(píng)論 0 9
  • kafka的定義:是一個(gè)分布式消息系統(tǒng)唁奢,由LinkedIn使用Scala編寫(xiě),用作LinkedIn的活動(dòng)流(Act...
    時(shí)待吾閱讀 5,302評(píng)論 1 15
  • 【前話】到現(xiàn)在第三章為止窝剖,越來(lái)越迷茫繼續(xù)寫(xiě)下去的目的和意義麻掸,自認(rèn)為不善于寫(xiě)連載,可是每當(dāng)想起我的那些健在和逝去的親...
    醉花令閱讀 458評(píng)論 0 0