Python3 & Queue實現(xiàn)進程間通信

一、Queue的基本使用

1啃洋、導入模塊

import multiprocessing

2传货、定義消息隊列,并指定長度
如果不指定隊列?度宏娄,則默認為最?
如果指定了消息隊列的??问裕,則消息隊列就有上限控制

queue = multiprocessing.Queue(3)

3、 向消息隊列中放?內容,可以是任何類型的數(shù)據(jù)

queue.put(1) # 放?第?個值
queue.put("hello") # 放?第?個值
queue.put([1, 2, 3]) # 放?第三個值

4孵坚、 從消息隊列中取出數(shù)據(jù)

print(queue)  # 打印隊列對象

value1 = queue.get()  # 獲取第?個值
print(value1)

value2 = queue.get()  # 獲取第?個值
print(value2)

value3 = queue.get()  # 獲取第三個值
print(value3)

二粮宛、Queue的常用方法

Queue.qsize():返回當前隊列包含的消息數(shù)量;
Queue.empty():如果隊列為空卖宠,返回True巍杈,反之False ;如果獲取是否為空的進程和放置值的進程同時執(zhí)?扛伍,值未放進去筷畦,empty() 已經(jīng)開始取,使用該方法得到的結果可能是True刺洒。避免這種情況發(fā)生鳖宾,可使用::time.sleep(0.0001) 稍微休眠下。
Queue.full():如果隊列滿了逆航,返回True,反之False鼎文;
Queue.get([block[, timeout]]):獲取隊列中的?條消息,然后將其從列隊中移除因俐,block默認值為
True拇惋;
如果block使?默認值,且沒有設置timeout(單位秒)女揭,消息列隊如果為空蚤假,此時程序將被阻
塞(停在讀取狀態(tài))栏饮,直到從消息列隊讀到消息為?吧兔,如果設置了timeout,則會等待timeout
秒袍嬉,若還沒讀取到任何消息境蔼,則拋出"Queue.Empty"異常灶平;
如果block值為False,消息列隊如果為空箍土,則會?刻拋出"Queue.Empty"異常逢享;
Queue.get_nowait():相當Queue.get(False);
Queue.put(item,[block[, timeout]]):將item消息寫?隊列吴藻,block默認值為True瞒爬;
如果block使?默認值,且沒有設置timeout(單位秒)沟堡,消息列隊如果已經(jīng)沒有空間可寫?侧但,
此時程序將被阻塞(停在寫?狀態(tài)),直到從消息列隊騰出空間為?航罗,如果設置了timeout禀横,
則會等待timeout秒,若還沒空間粥血,則拋出"Queue.Full"異常柏锄;
如果block值為False,消息列隊如果沒有空間可寫?复亏,則會?刻拋出"Queue.Full"異常趾娃;
Queue.put_nowait(item):相當Queue.put(item, False);

三缔御、Queue實現(xiàn)進程間通信

以Queue為例茫舶,在?進程中創(chuàng)建兩個?進程,?個往Queue?寫數(shù)據(jù)刹淌,?個從Queue?讀數(shù)據(jù)饶氏。具體實現(xiàn)如下:

'''
1、創(chuàng)建隊列有勾,寫入數(shù)據(jù)
2疹启、從隊列中讀取數(shù)據(jù)
3、使用進程通信
'''

import  time
import multiprocessing

def queue_write(queue):
   for i in range(10):
       if queue.full():
           print("隊列已滿~~~")
           break
       queue.put(i)
       print(i)
       time.sleep(0.5)

def queue_read(queue):
   while True:
       if queue.empty():
           print("隊列已空~~~")
           break
       result = queue.get()
       print(result)

if __name__ == '__main__':
   queue = multiprocessing.Queue(5)
   
   process_write = multiprocessing.Process(target=queue_write,args=(queue,))
   process_write.start()
   process_write.join()

   process_read = multiprocessing.Process(target=queue_read,args=(queue,))
   process_read.start()

輸出結果:


0
1
2
3
4
隊列已滿~~~
0
1
2
3
4
隊列已空~~~
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末蔼卡,一起剝皮案震驚了整個濱河市喊崖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌雇逞,老刑警劉巖荤懂,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異塘砸,居然都是意外死亡节仿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門掉蔬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來廊宪,“玉大人矾瘾,你說我怎么就攤上這事〖簦” “怎么了壕翩?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長傅寡。 經(jīng)常有香客問我放妈,道長,這世上最難降的妖魔是什么荐操? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任大猛,我火速辦了婚禮,結果婚禮上淀零,老公的妹妹穿的比我還像新娘挽绩。我一直安慰自己,他們只是感情好驾中,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布唉堪。 她就那樣靜靜地躺著,像睡著了一般肩民。 火紅的嫁衣襯著肌膚如雪唠亚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天持痰,我揣著相機與錄音灶搜,去河邊找鬼。 笑死工窍,一個胖子當著我的面吹牛割卖,可吹牛的內容都是我干的。 我是一名探鬼主播患雏,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼鹏溯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了淹仑?” 一聲冷哼從身側響起丙挽,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匀借,沒想到半個月后颜阐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡吓肋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年凳怨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓬坡。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡猿棉,死狀恐怖磅叛,靈堂內的尸體忽然破棺而出屑咳,到底是詐尸還是另有隱情萨赁,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布兆龙,位于F島的核電站杖爽,受9級特大地震影響,放射性物質發(fā)生泄漏紫皇。R本人自食惡果不足惜慰安,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望聪铺。 院中可真熱鬧化焕,春花似錦、人聲如沸铃剔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽键兜。三九已至凤类,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間普气,已是汗流浹背谜疤。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留现诀,地道東北人夷磕。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像仔沿,于是被迫代替她去往敵國和親企锌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容