日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python grpc入门

發布時間:2025/3/15 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python grpc入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

準備

1.升級pip

$ python -m pip install --upgrade pip

2.安裝grpc

$ python -m pip install grpcio

3.安裝grpc tools

$ python -m pip install grpcio-tools

4.下載example

$ # Clone the repository to get the example code: $ git clone https://github.com/grpc/grpc $ # Navigate to the "hello, world" Python example: $ cd grpc/examples/python/helloworld

運行一個簡單的CS demo

Terminal A:

$ python greeter_server.py

Terminal B:

$ python greeter_client.py

greeter_server.py:

# Copyright 2015, Google Inc. # All rights reserved. # ..."""The Python implementation of the GRPC helloworld.Greeter server."""from concurrent import futures import timeimport grpcimport helloworld_pb2 import helloworld_pb2_grpc_ONE_DAY_IN_SECONDS = 60 * 60 * 24class Greeter(helloworld_pb2_grpc.GreeterServicer):def SayHello(self, request, context):return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name)def serve():server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))helloworld_pb2_grpc.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()

greeter_client.py:

# Copyright 2015, Google Inc. # All rights reserved. # ... """The Python implementation of the GRPC helloworld.Greeter client."""from __future__ import print_functionimport grpcimport helloworld_pb2 import helloworld_pb2_grpcdef run():channel = grpc.insecure_channel('localhost:50051')stub = helloworld_pb2_grpc.GreeterStub(channel)response = stub.SayHello(helloworld_pb2.HelloRequest(name='you'))print("Greeter client received: " + response.message)if __name__ == '__main__':run()

結果,客戶端顯示:

root@ubuntu:/home/wasdns/grpc/examples/python/helloworld# python greeter_client.py Greeter client received: Hello, you!

Make a Difference

1.本例的*.proto文件:

// Copyright 2015, Google Inc. // All rights reserved. // ...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 greetingrpc 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; }

將其修改為:

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 greetingrpc SayHello (HelloRequest) returns (HelloReply) {}// Say Hello Againrpc SayHelloAgain (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.在examples/python/helloworld目錄下,執行:

$ python -m grpc_tools.protoc -I../../protos --python_out=. --grpc_python_out=. ../../protos/helloworld.proto

該命令生成兩個文件:包含請求和回復類定義的helloworld_pb2.py?和 包含客戶端和服務端類定義的helloworld_pb2_grpc.py。

3.更新并運行demo:

將greeter_server.py中的內容修改為:

class Greeter(helloworld_pb2_grpc.GreeterServicer):def SayHello(self, request, context):return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name)def SayHelloAgain(self, request, context):return helloworld_pb2.HelloReply(message='Hello again, %s!' % request.name)

將greeter_client.py中的內容修改為:

def run():channel = grpc.insecure_channel('localhost:50051')stub = helloworld_pb2_grpc.GreeterStub(channel)response = stub.SayHello(helloworld_pb2.HelloRequest(name='wasdns'))print("Greeter client received: " + response.message)response = stub.SayHelloAgain(helloworld_pb2.HelloRequest(name='wasdns'))print("Greeter client received: " + response.message)

運行:

root@ubuntu:/home/wasdns/grpc/examples/python/helloworld# python greeter_client.py Greeter client received: Hello, wasdns! Greeter client received: Hello Again, wasdns!

Appendix

helloworld_pb2.py:

# Generated by the protocol buffer compiler. DO NOT EDIT! # source: helloworld.protoimport sys _b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database from google.protobuf import descriptor_pb2 # @@protoc_insertion_point(imports)_sym_db = _symbol_database.Default()DESCRIPTOR = _descriptor.FileDescriptor(name='helloworld.proto',package='helloworld',syntax='proto3',serialized_pb=_b('\n\x10helloworld.proto\x12\nhelloworld\"\x1c\n\x0cHelloRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x1d\n\nHelloReply\x12\x0f\n\x07message\x18\x01 \x01(\t2\x8e\x01\n\x07Greeter\x12>\n\x08SayHello\x12\x18.helloworld.HelloRequest\x1a\x16.helloworld.HelloReply\"\x00\x12\x43\n\rSayHelloAgain\x12\x18.helloworld.HelloRequest\x1a\x16.helloworld.HelloReply\"\x00\x42\x36\n\x1bio.grpc.examples.helloworldB\x0fHelloWorldProtoP\x01\xa2\x02\x03HLWb\x06proto3') ) _sym_db.RegisterFileDescriptor(DESCRIPTOR)_HELLOREQUEST = _descriptor.Descriptor(name='HelloRequest',full_name='helloworld.HelloRequest',filename=None,file=DESCRIPTOR,containing_type=None,fields=[_descriptor.FieldDescriptor(name='name', full_name='helloworld.HelloRequest.name', index=0,number=1, type=9, cpp_type=9, label=1,has_default_value=False, default_value=_b("").decode('utf-8'),message_type=None, enum_type=None, containing_type=None,is_extension=False, extension_scope=None,options=None),],extensions=[],nested_types=[],enum_types=[],options=None,is_extendable=False,syntax='proto3',extension_ranges=[],oneofs=[],serialized_start=32,serialized_end=60, )_HELLOREPLY = _descriptor.Descriptor(name='HelloReply',full_name='helloworld.HelloReply',filename=None,file=DESCRIPTOR,containing_type=None,fields=[_descriptor.FieldDescriptor(name='message', full_name='helloworld.HelloReply.message', index=0,number=1, type=9, cpp_type=9, label=1,has_default_value=False, default_value=_b("").decode('utf-8'),message_type=None, enum_type=None, containing_type=None,is_extension=False, extension_scope=None,options=None),],extensions=[],nested_types=[],enum_types=[],options=None,is_extendable=False,syntax='proto3',extension_ranges=[],oneofs=[],serialized_start=62,serialized_end=91, )DESCRIPTOR.message_types_by_name['HelloRequest'] = _HELLOREQUEST DESCRIPTOR.message_types_by_name['HelloReply'] = _HELLOREPLYHelloRequest = _reflection.GeneratedProtocolMessageType('HelloRequest', (_message.Message,), dict(DESCRIPTOR = _HELLOREQUEST,__module__ = 'helloworld_pb2'# @@protoc_insertion_point(class_scope:helloworld.HelloRequest))) _sym_db.RegisterMessage(HelloRequest)HelloReply = _reflection.GeneratedProtocolMessageType('HelloReply', (_message.Message,), dict(DESCRIPTOR = _HELLOREPLY,__module__ = 'helloworld_pb2'# @@protoc_insertion_point(class_scope:helloworld.HelloReply))) _sym_db.RegisterMessage(HelloReply)DESCRIPTOR.has_options = True DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\033io.grpc.examples.helloworldB\017HelloWorldProtoP\001\242\002\003HLW')) try:# THESE ELEMENTS WILL BE DEPRECATED.# Please use the generated *_pb2_grpc.py files instead.import grpcfrom grpc.beta import implementations as beta_implementationsfrom grpc.beta import interfaces as beta_interfacesfrom grpc.framework.common import cardinalityfrom grpc.framework.interfaces.face import utilities as face_utilitiesclass GreeterStub(object):"""The greeting service definition."""def __init__(self, channel):"""Constructor.Args:channel: A grpc.Channel."""self.SayHello = channel.unary_unary('/helloworld.Greeter/SayHello',request_serializer=HelloRequest.SerializeToString,response_deserializer=HelloReply.FromString,)self.SayHelloAgain = channel.unary_unary('/helloworld.Greeter/SayHelloAgain',request_serializer=HelloRequest.SerializeToString,response_deserializer=HelloReply.FromString,)class GreeterServicer(object):"""The greeting service definition."""def SayHello(self, request, context):"""Sends a greeting"""context.set_code(grpc.StatusCode.UNIMPLEMENTED)context.set_details('Method not implemented!')raise NotImplementedError('Method not implemented!')def SayHelloAgain(self, request, context):"""Say Hello Again"""context.set_code(grpc.StatusCode.UNIMPLEMENTED)context.set_details('Method not implemented!')raise NotImplementedError('Method not implemented!')def add_GreeterServicer_to_server(servicer, server):rpc_method_handlers = {'SayHello': grpc.unary_unary_rpc_method_handler(servicer.SayHello,request_deserializer=HelloRequest.FromString,response_serializer=HelloReply.SerializeToString,),'SayHelloAgain': grpc.unary_unary_rpc_method_handler(servicer.SayHelloAgain,request_deserializer=HelloRequest.FromString,response_serializer=HelloReply.SerializeToString,),}generic_handler = grpc.method_handlers_generic_handler('helloworld.Greeter', rpc_method_handlers)server.add_generic_rpc_handlers((generic_handler,))class BetaGreeterServicer(object):"""The Beta API is deprecated for 0.15.0 and later.It is recommended to use the GA API (classes and functions in thisfile not marked beta) for all further purposes. This class was generatedonly to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""""""The greeting service definition."""def SayHello(self, request, context):"""Sends a greeting"""context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)def SayHelloAgain(self, request, context):"""Say Hello Again"""context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)class BetaGreeterStub(object):"""The Beta API is deprecated for 0.15.0 and later.It is recommended to use the GA API (classes and functions in thisfile not marked beta) for all further purposes. This class was generatedonly to ease transition from grpcio<0.15.0 to grpcio>=0.15.0.""""""The greeting service definition."""def SayHello(self, request, timeout, metadata=None, with_call=False, protocol_options=None):"""Sends a greeting"""raise NotImplementedError()SayHello.future = Nonedef SayHelloAgain(self, request, timeout, metadata=None, with_call=False, protocol_options=None):"""Say Hello Again"""raise NotImplementedError()SayHelloAgain.future = Nonedef beta_create_Greeter_server(servicer, pool=None, pool_size=None, default_timeout=None, maximum_timeout=None):"""The Beta API is deprecated for 0.15.0 and later.It is recommended to use the GA API (classes and functions in thisfile not marked beta) for all further purposes. This function wasgenerated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0"""request_deserializers = {('helloworld.Greeter', 'SayHello'): HelloRequest.FromString,('helloworld.Greeter', 'SayHelloAgain'): HelloRequest.FromString,}response_serializers = {('helloworld.Greeter', 'SayHello'): HelloReply.SerializeToString,('helloworld.Greeter', 'SayHelloAgain'): HelloReply.SerializeToString,}method_implementations = {('helloworld.Greeter', 'SayHello'): face_utilities.unary_unary_inline(servicer.SayHello),('helloworld.Greeter', 'SayHelloAgain'): face_utilities.unary_unary_inline(servicer.SayHelloAgain),}server_options = beta_implementations.server_options(request_deserializers=request_deserializers, response_serializers=response_serializers, thread_pool=pool, thread_pool_size=pool_size, default_timeout=default_timeout, maximum_timeout=maximum_timeout)return beta_implementations.server(method_implementations, options=server_options)def beta_create_Greeter_stub(channel, host=None, metadata_transformer=None, pool=None, pool_size=None):"""The Beta API is deprecated for 0.15.0 and later.It is recommended to use the GA API (classes and functions in thisfile not marked beta) for all further purposes. This function wasgenerated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0"""request_serializers = {('helloworld.Greeter', 'SayHello'): HelloRequest.SerializeToString,('helloworld.Greeter', 'SayHelloAgain'): HelloRequest.SerializeToString,}response_deserializers = {('helloworld.Greeter', 'SayHello'): HelloReply.FromString,('helloworld.Greeter', 'SayHelloAgain'): HelloReply.FromString,}cardinalities = {'SayHello': cardinality.Cardinality.UNARY_UNARY,'SayHelloAgain': cardinality.Cardinality.UNARY_UNARY,}stub_options = beta_implementations.stub_options(host=host, metadata_transformer=metadata_transformer, request_serializers=request_serializers, response_deserializers=response_deserializers, thread_pool=pool, thread_pool_size=pool_size)return beta_implementations.dynamic_stub(channel, 'helloworld.Greeter', cardinalities, options=stub_options) except ImportError:pass # @@protoc_insertion_point(module_scope)

helloworld_pb2_grpc.py:

# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! import grpcimport helloworld_pb2 as helloworld__pb2class GreeterStub(object):"""The greeting service definition."""def __init__(self, channel):"""Constructor.Args:channel: A grpc.Channel."""self.SayHello = channel.unary_unary('/helloworld.Greeter/SayHello',request_serializer=helloworld__pb2.HelloRequest.SerializeToString,response_deserializer=helloworld__pb2.HelloReply.FromString,)self.SayHelloAgain = channel.unary_unary('/helloworld.Greeter/SayHelloAgain',request_serializer=helloworld__pb2.HelloRequest.SerializeToString,response_deserializer=helloworld__pb2.HelloReply.FromString,)class GreeterServicer(object):"""The greeting service definition."""def SayHello(self, request, context):"""Sends a greeting"""context.set_code(grpc.StatusCode.UNIMPLEMENTED)context.set_details('Method not implemented!')raise NotImplementedError('Method not implemented!')def SayHelloAgain(self, request, context):"""Say Hello Again"""context.set_code(grpc.StatusCode.UNIMPLEMENTED)context.set_details('Method not implemented!')raise NotImplementedError('Method not implemented!')def add_GreeterServicer_to_server(servicer, server):rpc_method_handlers = {'SayHello': grpc.unary_unary_rpc_method_handler(servicer.SayHello,request_deserializer=helloworld__pb2.HelloRequest.FromString,response_serializer=helloworld__pb2.HelloReply.SerializeToString,),'SayHelloAgain': grpc.unary_unary_rpc_method_handler(servicer.SayHelloAgain,request_deserializer=helloworld__pb2.HelloRequest.FromString,response_serializer=helloworld__pb2.HelloReply.SerializeToString,),}generic_handler = grpc.method_handlers_generic_handler('helloworld.Greeter', rpc_method_handlers)server.add_generic_rpc_handlers((generic_handler,))

轉載自https://www.cnblogs.com/qq952693358/p/6942354.html?

grpc源碼解析:https://www.cnblogs.com/wxlevel/p/9154246.html#auto_id_6

https://www.cnblogs.com/wxlevel/p/9154434.html

總結

以上是生活随笔為你收集整理的python grpc入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。