Python進程專題8:分佈集羣的消息傳遞

上一篇文章: Python進程專題7:託管對象
下一篇文章: Python進程專題9:關於進程的實用工具函數
使用multiprocessing模塊的程序不只能夠於運行在同一計算機的其它程序進行消息傳遞,還能夠於位於不到計算機的遠程系統程序進行消息傳遞。其中的multiprocessing.connection子模塊包含該目的的函數和類:

connections.Client(address,family,authenticate,authkey)segmentfault

鏈接到另外一個進程,此進程必須已經正在監聽地址address。
address:表明網絡地址的元組(hostname,port),或者表明UNIX域套接字的文件名,或者表明
r'\\servername\pipe\pipename'形式的字符串,表明遠程系統servername(本地計算機的servername爲'.')上的一條Windows命名管道。

family:表示地址格式的字符串。通常是'AF_INET'、'AF_UNIX'、或'AF_PIPE'.若是省略此參數,將從address的格式退出它的值。

backlog:是一個整數,當address參數指定了一個網絡鏈接時,對應於傳遞給套接字的listen()方法的值,backlog默認爲1。

authenticate:一個布爾標誌,指定是否使用摘要身份驗證。
authkey:包含身份驗證密鑰的字符串,若是忽略此參數,將使用current_process().authkey的值。

此函數的返回值是Connection對象,管道中有講過。

connections.Listener(address,family,backlog,authenticate,authkey)服務器

實現了一臺服務器,用於偵聽和處理Client()函數發送的鏈接。
若是省略address參數,將選擇默認地址,若是同時省略address和family兩個參數,將選擇本地系統上速度最快的可用通訊模式。

Listener實例listener支持一下方法和屬性。網絡

屬性或方法名 介紹
listener.accept() 接受一個新鏈接,並返回一個Connetion對象。若是身份驗證失敗,將引起Authentication-Error異常
listener.address 偵聽器正在使用的地址
listener.close() 關閉偵聽器正在使用的管道或套接字
listener.last_accepted 接受的最後一個客戶端的地址。

實例:服務器端與客戶端發送消息

  • 服務器端代碼:
#服務器端,負責監聽客戶端並實現簡單的遠程操做
from multiprocessing.connection import Listener
serv=Listener(('',11111),authkey='123456'.encode())
while True:
    conn=serv.accept()
    while True:
        try:
            x,y=conn.recv()
        except EOFError:
            print("出錯了")
            break
        result=x+y
        conn.send(result)
    conn.close()
  • 客戶端代碼:
#客戶端,向服務器端發送消息
from multiprocessing.connection import Client
conn=Client(('localhost',11111),authkey='123456'.encode())
conn.send((5,6))
r=conn.recv()
print(r)


conn.send(("mark","帥哥"))
r=conn.recv()
print(r)
conn.close()
  • 客戶端打印結果:
11
mark帥哥
相關文章
相關標籤/搜索