python中的queue實現?Process之間有時需要通信,操作系統提供了很多機制來實現進程間的通信,現在小編就來說說關于python中的queue實現?下面内容希望能幫助到你,我們來一起看看吧!
Process之間有時需要通信,操作系統提供了很多機制來實現進程間的通信。
1. Queue的使用可以使用multiprocessing模塊的Queue實現多進程之間的數據傳遞,Queue本身是一個消息列隊程序,首先用一個小實例來演示一下Queue的工作原理:
#coding=utf-8 from multiprocessing import Queue q=Queue(3) #初始化一個Queue對象,最多可接收三條Put消息 q.put("消息1") q.put("消息2") print(q.full()) #False q.put("消息3") print(q.full()) #True #因為消息列隊已滿下面的try都會抛出異常,第一個try會等待2秒後再抛出異常,第二個Try會立刻抛出異常 try: q.put("消息4",True,2) except: print("消息列隊已滿,現有消息數量:%s"%q.qsize()) try: q.put_nowait("消息4") except: print("消息列隊已滿,現有消息數量:%s"%q.qsize()) #推薦的方式,先判斷消息列隊是否已滿,再寫入 if not q.full(): q.put_nowait("消息4") #讀取消息時,先判斷消息列隊是否為空,再讀取 if not q.empty(): for i in range(q.qsize()): print(q.get_nowait())
運行結果:
False True 消息列隊已滿,現有消息數量:3 消息列隊已滿,現有消息數量:3 消息1 消息2 消息3
說明
初始化Queue()對象時(例如:q=Queue()),若括号中沒有指定最大可接收的消息數量,或數量為負值,那麼就代表可接受的消息數量沒有上限(直到内存的盡頭);
Queue.qsize():返回當前隊列包含的消息數量;
Queue.empty():如果隊列為空,返回True,反之False ;
Queue.full():如果隊列滿了,返回True,反之False;
Queue.get([block[, timeout]]):獲取隊列中的一條消息,然後将其從列隊中移除,block默認值為True;
1)如果block使用默認值,且沒有設置timeout(單位秒),消息列隊如果為空,此時程序将被阻塞(停在讀取狀态),直到從消息列隊讀到消息為止,如果設置了timeout,則會等待timeout秒,若還沒讀取到任何消息,則抛出"Queue.Empty"異常;
2)如果block值為False,消息列隊如果為空,則會立刻抛出"Queue.Empty"異常;
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!