当前位置:首页 > 英语 > 正文

Python gRPC 入门指南,轻松掌握远程过程调用

  • 英语
  • 2024-09-25 20:11:36
  • 4

pip install grpcio grpcio-tools</pre><p>由于 gRPC 使用 Protocol Buffers 来定义服务接口,因此还需要安装 protobuf 编译器:</p><pre class="brush:bash;toolbar:false">

pip install protobuf</pre><h2>编写 .proto 文件</h2><p>一切的开始都是一个 .proto 文件,它是 gRPC 服务的核心,在这个文件中,我们定义服务接口和数据结构,一个简单的服务可能包含如下内容:</p><pre class="brush:protobuf;toolbar:false">

syntax = "proto3";

service Greeter {

rpc SayHello (HelloRequest) returns (HelloResponse);

message HelloRequest {

string name = 1;

message HelloResponse {

string greeting = 1;

}</pre><p>此文件定义了一个名为<code>Greeter</code> 的服务,该服务有一个<code>SayHello</code> 的方法,接收<code>HelloRequest</code> 并返回<code>HelloResponse</code>。</p><h2>生成服务端和客户端代码</h2><p>使用<code>protoc</code> 编译器和安装的<code>grpcio-tools</code> 插件来生成 Python 代码,运行以下命令:</p><pre class="brush:bash;toolbar:false">

python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. your_service.proto</pre><p>这将生成两个文件:<code>your_service_pb2.py</code>(包含消息类)和<code>your_service_pb2_grpc.py</code>(包含基于 gRPC 的服务端和客户端存根)。</p><h2>实现服务端</h2><p>服务端的实现相对直观,主要步骤包括创建一个继承自生成的存根类的新类,并在其中实现定义的方法。</p><pre class="brush:python;toolbar:false">

import grpc

import your_service_pb2

import your_service_pb2_grpc

class GreeterServicer(your_service_pb2_grpc.GreeterServicer):

def SayHello(self, request, context):

return your_service_pb2.HelloResponse(greeting="Hello, %s!" % request.name)

server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))

Python gRPC 入门指南,轻松掌握远程过程调用

your_service_pb2_grpc.add_GreeterServicer_to_server(GreeterServicer(), server)

server.add_insecure_port('[::]:50051')

server.start()

server.wait_for_termination()</pre><h2>实现客户端</h2><p>客户端的实现同样简单,主要是通过生成的存根类创建一个通道和服务对象,然后调用远程方法。</p><pre class="brush:python;toolbar:false">

import grpc

import your_service_pb2

import your_service_pb2_grpc

channel = grpc.insecure_channel('localhost:50051')

stub = your_service_pb2_grpc.GreeterStub(channel)

response = stub.SayHello(your_service_pb2.HelloRequest(name='world'))

print("Greeter client received: " + response.greeting)</pre><p>Python gRPC 的使用可以概括为三个主要步骤:编写 .proto 文件定义服务接口,使用<code>protoc</code> 编译器生成服务端和客户端代码,最后分别实现服务端和客户端逻辑,掌握 gRPC 无疑会让您的编程之路更加顺畅。</p>

有话要说...