远程过程调用RPC常用与分布式计算,对应Python库名为rpyc;
from multiprocessing import Pool
from rpyc import Service
from rpyc.utils.server import ThreadedServer
class RemoteService(Service):
def on_connect(self, conn):
print(conn)
'''供客户端调用的方法前得加exposed_'''
def exposed_search(self, data):
print(data)
data['result'] = 'ok'
return data
def main(port):
sr = ThreadedServer(service=RemoteService, hostname='127.0.0.1', port=port, auto_register=False)
print(f'Server IP: {(sr.host,sr.port)}')
sr.start()
if __name__ == '__main__':
pool = Pool(processes=2)
pool.apply_async(main, args=(9998,))
pool.apply_async(main, kwds={'port':9999})
pool.close()
pool.join()
上段为rpyc服务端,下段为rpyc调用端;
import rpyc
import time
from multiprocessing import Pool
def search_db(query,port):
conn = rpyc.connect('localhost',port)
'''调用时省略exposed_'''
result = conn.root.search(query)
time.sleep(1)
print(result)
conn.close()
if __name__ == '__main__':
pool = Pool(processes=2)
pool.apply_async(search_db, args=({"match": {'name': 'user'}}, 9998))
pool.apply_async(search_db, kwds={'query': {"match": {'name': 'user'}},'port':9999})
pool.close()
pool.join()