Python使用GRPC
0.安装依赖库
pip install grpcio pip install protobuf pip install grpcio-tools
1.编写proto文件
// Copyright 2015 The gRPC Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
option java_multiple_files = true;
option java_package = "io.grpc.examples.helloworld";
option java_outer_classname = "HelloWorldProto";
option objc_class_prefix = "HLW";
package helloworld;
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
2.编译生成proto对应源文件
python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. helloworld.proto
3.编写server端代码
# -*- coding: utf-8 -*-
# Author: areful
#
# pip install grpcio
# pip install protobuf
# pip install grpcio-tools
# ...
# Copyright 2015, Google Inc.
# All rights reserved.
"""The Python implementation of the GRPC helloworld.Greeter server."""
import time
from concurrent import futures
from gj.grpc.helloworld.helloworld_pb2 import *
from gj.grpc.helloworld.helloworld_pb2_grpc import *
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
class Greeter(GreeterServicer):
def SayHello(self, request, context):
return HelloReply(message='Hello, %s!' % request.name)
def serve():
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
add_GreeterServicer_to_server(Greeter(), server)
server.add_insecure_port('[::]:50051')
server.start()
try:
while True:
time.sleep(_ONE_DAY_IN_SECONDS)
except KeyboardInterrupt:
server.stop(0)
if __name__ == '__main__':
serve()
4.编写client端代码
# -*- coding: utf-8 -*-
# Author: areful
#
# pip install grpcio
# pip install protobuf
# pip install grpcio-tools
# ...
# Copyright 2015, Google Inc.
# All rights reserved.
"""The Python implementation of the GRPC helloworld.Greeter client."""
from __future__ import print_function
from gj.grpc.helloworld.helloworld_pb2 import *
from gj.grpc.helloworld.helloworld_pb2_grpc import *
def run():
channel = grpc.insecure_channel('localhost:50051')
stub = GreeterStub(channel)
response = stub.SayHello(HelloRequest(name='world'))
print("Greeter client received: " + response.message)
if __name__ == '__main__':
run()
5.分别运行server、client代码,运行输出如下:

浙公网安备 33010602011771号