Python 调用gRPC,也需要编译对应的proto文件,编译前需要安装必备的模块
# 安装模块
pip install grpcio
# 安装编译工具
pip install grpcio-tools
# 在pb文件夹命令行运行,编译出.py文件
python.exe -m grpc_tools.protoc --python_out=. --grpc_python_out=. -I. grpc.proto
得到文件:grpc_pb2_grpc.py、grpc_pb2.py
把文件移动到python目录下,新建python文件client.py
和server.py
client.py
import grpc
import grpc_pb2
import grpc_pb2_grpc
def run():
# 连接 rpc 服务器
conn = grpc.insecure_channel('localhost:10086')
# 调用 rpc 服务
client = grpc_pb2_grpc.GRPCStub(conn)
req = client.Ping(grpc_pb2.ping(msg='from python client'))
print("python client received: " + req.msg)
if __name__ == '__main__':
run()
完成客户端后,就可以用已经写好的go语言grpc服务器做测试,理论上已经可以跨语言调用了。
go语言服务端:go run main.go
python客户端:
python client.py
Python gRPC服务测试通过! go语言和python已经连起来了!! 接下来编写python服务端,go语言来调用
server.py
from concurrent import futures
import grpc
import grpc_pb2
import grpc_pb2_grpc
# 实现 proto 文件中定义的 GRPCServicer
class RpcServer(grpc_pb2_grpc.GRPCServicer):
# 实现 proto 文件中定义的 rpc 调用
def Ping(self, request, context):
print(request.msg)
return grpc_pb2.pong(msg = 'reply from python')
def serve():
# 启动 rpc 服务
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
grpc_pb2_grpc.add_GRPCServicer_to_server(RpcServer(), server)
server.add_insecure_port('[::]:10086')
server.start()
server.wait_for_termination()
if __name__ == '__main__':
serve()
运行测试:
python服务:python server.py
go客户端:
go run main.go
python客户端:
python client.py
可以看到,python的客户端和go的客户端都可以远程调用python的服务端,实验成功~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)