Python 多進程編程之 進程間的通訊(Queue)

Python 多進程編程之 進程間的通訊(Queue)python

1,進程間通訊
Process有時是須要通訊的,操做系統提供了不少機制來實現進程之間的通訊,而Queue就是其中的一個方法
----這是操做系統開闢的一個空間,能夠讓各個子進程把信息放到Queue中,也能夠把本身須要的信息取走
----這就至關於系統給python開闢了一個聊天室,讓python建立的子進程能夠在這個聊天室裏暢所欲言
----一個進程能夠放多條消息到Queue中編程

2,實例函數

#導入Queue,Process
from multiprocessing import Queue,Process
import os

#寫入進程
def wp(q):
    print("%s開始寫入:"%os.getpid)
    for i in "WANG":
        #將信息寫入隊列
        q.put(i)
        print(i)

#讀取進程
def rd(q):
    print("%s開始讀取"%os.getpid())
    while True:
        if not q.empty():
            #從隊列讀取信息
            print("read to %s"%q.get())

if __name__=="__main__":
    #建立隊列
    q = Queue()

    #建立寫入進程
    w = Process(target=wp,args=(q,))
    #啓動寫入進程
    w.start()

    #建立讀取進程
    r = Process(target=rd,args=(q,))
    #啓動讀取進程
    r.start()    

3,執行結果ui

1265開始讀取
<built-in function getpid>開始寫入:
W
A
N
G
read to W
read to A
read to N
read to G

 

 

4,進程間通訊經常使用函數spa

q.Queue()
--------------------------------------------------------
 def __init__(self, maxsize=-1):
        self._maxsize = maxsize
----   maxsize=-1,表示隊列個數無窮大
----   初始化Queue對象時,(例,q=Queue()  )
或括號中沒有指定最大可接收的消息數量,或數量爲負值,
那麼就表示可接收的消息數量沒有上限

 

q.put("信息")
---------------------------------
將信息放入隊列中
def put(self, obj, block=True, timeout=None):
    pass
obj----傳入的信息
block=True----阻塞=真  :  真阻塞(默認值)
timeout=None----等待時間,None(默認值)表示無限等待, 若是timeou設置值,則會等待N秒後,強制放入(put)

 

q.get()
----------------------------------
def get(self, block=True, timeout=None):
     pass
從隊列中拿出一個進程消息
block=True 默認值是真阻塞,
timeout=None 意思是  無限,無窮
兩個合在一塊兒的意思是  無限阻塞,無窮等待
隊列的特色是:先進先出 因此get拿的順序也是,先進先出 first in first out 

 

q.put_nowait()
-------------------------------------
def put_nowait(self, obj):
    pass

至關於q.put(obj,False)
不等待,直接放入

 

q.get_nowait()
----------------------------------------
def get_nowait(self):
      pass

不作等待,就是要獲取
若是隊列中沒有消息,就會報錯
----解決報錯,加入try 異常處理

 

q.qsize()
------------------------------------
    def qsize(self):
        return 0

返回當前隊列包含的消息數量

 

q.full()
------------------------------
檢測隊列是否已經滿了
True: 滿
False: 未滿

 

q.empty()
---------------------------------
    def empty(self):
        return False

檢測隊列是否爲空
True:空
False:未空
相關文章
相關標籤/搜索