grpc服务python版本

安装依赖

# tools 包含代码生成工具,会自动安装依赖的 grpcio 包
pip install grpcio_tools  

编写协议文件

编写协议文件pi.proto

syntax = "proto3";

package pi;

// pi service
service PiCalculator {
    // pi method
    rpc Calc(PiRequest) returns (PiResponse) {}
}

// pi input
message PiRequest {
    int32 n = 1;
}

// pi output
message PiResponse {
    double value = 1;
}

生成代码

python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. pi.proto
  • 这个命令行有很多参数,其中python_out目录指定pi_pb2.py文件的输出路径,grpc_python_out指定pi_pb2_grpc.py文件的输出路径。-I参数指定协议文件的查找目录,我们都将它们设置为当前目录。
  • 命令执行后,可以看到当前目录下多了两个文件,pi_pb2.py和pi_pb2_grpc.py。前者是消息序列化类,后者包含了服务器 Stub 类和客户端 Stub 类,以及待实现的服务 RPC 接口。

实现服务接口

server端代码

# -*- coding:utf-8 -*-
# server.py

import math
import grpc
import time
from concurrent import futures


import pi_pb2, pi_pb2_grpc


# 圆周率计算服务实现类
class PiCalculatorServicer(pi_pb2_grpc.PiCalculatorServicer):
	def Calc(self, request, context):
		# 计算圆周率的逻辑在这里
		s = 0.0
		for i in range(request.n):
			s += 1.0 / (2 * i + 1) / (2 * i + 1)

		# 注意返回的是一个响应对象
		return pi_pb2.PiResponse(value=math.sqrt(8 * s))


def main():
	# 多线程服务器
	server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
	# 实例化圆周率服务器类
	pi_server = PiCalculatorServicer()
	# 注册本地服务
	pi_pb2_grpc.add_PiCalculatorServicer_to_server(pi_server, server)
	# 监听端口
	server.add_insecure_port("127.0.0.1:8080")
	# 开始接收请求进行服务
	server.start()
	# 使用ctrl+c可以退出服务
	try:
		time.sleep(1000)
	except KeyboardInterrupt:
		server.stop(0)


if __name__ == '__main__':
	main()

client端代码

# -*- coding:utf-8 -*-
# client.py

import grpc

import pi_pb2
import pi_pb2_grpc


def main():
    channel = grpc.insecure_channel('localhost:8080')
    # 使用 stub
    client = pi_pb2_grpc.PiCalculatorStub(channel)
    # 调用吧
    for i in range(1, 1000):
        print(client.Calc(pi_pb2.PiRequest(n=i)).value)


if __name__ == '__main__':
    main()
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值