上一篇文章: 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帥哥