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