如何利用multiprocessing.connection模块进行远程过程调用
发布时间:2023-12-27 06:53:22
使用multiprocessing.connection模块进行远程过程调用可以方便地在不同的进程之间进行通信。下面是一个使用multiprocessing.connection模块进行远程过程调用的简单例子。
# server.py
from multiprocessing.connection import Listener
import traceback
def square(x):
return x ** 2
def cube(x):
return x ** 3
def handle_request(conn):
try:
while True:
function_name, args = conn.recv()
if function_name == 'square':
result = square(*args)
elif function_name == 'cube':
result = cube(*args)
else:
result = None
conn.send(result)
except EOFError:
traceback.print_exc()
print('Connection closed')
if __name__ == '__main__':
address = ('localhost', 1234)
listener = Listener(address)
print('Server started on {}:{}'.format(*address))
while True:
conn = listener.accept()
print('Connection accepted from', listener.last_accepted)
handle_request(conn)
# client.py
from multiprocessing.connection import Client
if __name__ == '__main__':
address = ('localhost', 1234)
client = Client(address)
print('Connected to {}:{}'.format(*address))
# 调用远程过程,并获取返回结果
client.send(('square', [2]))
result = client.recv()
print('Square:', result)
client.send(('cube', [3]))
result = client.recv()
print('Cube:', result)
client.send(('invalid_function', []))
result = client.recv()
print('Invalid function:', result)
client.close()
在这个例子中,server.py作为服务器端,client.py作为客户端。服务器端首先定义了两个简单的函数square和cube用于计算平方和立方。然后通过一个循环接受客户端的请求并执行相应的函数,最后将结果发送回客户端。
客户端首先连接到服务器端,在连接成功后即可通过send方法发送函数名和参数给服务器端,然后通过recv方法接收远程过程的结果。
这个例子简单地实现了远程过程调用,可以通过增加函数和对应的处理逻辑来扩展功能。需要注意,服务器端是通过监听来接受连接的,所以可以同时有多个客户端连接到服务器端。
