转载请注明出处:https://blog.csdn.net/qq_33427047/article/details/80393363
RPC(Remote Procedure Call, 远程过程调用)
- 主要实现了Java client调用python server( 深度学习模型, 如 Parlai )
主要的步骤为:
- 使用Java调用Python服务器RPC, 用来远程启动深度学习模型
- 修改模型输入输出格式为: 通过socket实现client-server通信
参考Python与Java之间Socket通信 - 实现client: Java多线程
服务器采用腾讯云服务器: 完成电脑和服务器的SOCKET通信
使用Java调用Python服务器RPC
- 通过使用xmlrpc机制,让python程序和java程序之间RPC通信交互
- 配置java开发环境:
- 下载jar包: apache-xmlrpc-3.1.3-bin.tar.gz
无法下载试试度盘: 链接: https://pan.baidu.com/s/1Y1e3Zh90PHuKKMSckUuWMA 密码: afi8 - 解压得到5个jar包
- 在Java工程中添加jar包: 右键工程 -> 选择properties -> Java Build Path -> Libraries -> add External JARs…
- 具体的作用和用法可以参考它的官方API文档:http://ws.apache.org/xmlrpc/apidocs/index.html
- 下载jar包: apache-xmlrpc-3.1.3-bin.tar.gz
Python建立RPC服务器或客户端的通用库:
# -*- coding:utf-8 -*- # server.py from SimpleXMLRPCServer import SimpleXMLRPCServer from SocketServer import ThreadingMixIn from xmlrpclib import ServerProxy import thread import os import sys class ThreadXMLRPCServer(ThreadingMixIn, SimpleXMLRPCServer): pass class RPCServer(): def __init__(self, ip='127.0.0.1', port='8000'): self.ip = ip self.port = int(port) self.svr = None def start(self, func_lst): thread.start_new_thread(self.service, (func_lst, 0,)) def resume_service(self, v1, v2): self.svr.serve_forever(poll_interval=0.001) def service(self, func_lst, v1): self.svr = ThreadXMLRPCServer((self.ip, self.port), allow_none=True) for func in func_lst: self.svr.register_function(func) self.svr.serve_forever(poll_interval=0.001) def activate(self): threa