如何从grpc fi调用方法

2024-05-28 18:57:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经用python()中的grpc生成了两个文件,现在我想制作一个使用grpc方法的客户机。 第一步是创建存根:

grpcChannel = grpc.insecure_channel('https://.....')  
stub = garden_pb2_grpc.GardenServiceStub(grpcChannel)

现在我想用存根的方法,这样做:

^{pr2}$

问题是我不知道如何生成对象。所以我这样做:

^{3}$

它不起作用,因为我在createrequest中没有参数,但是我不知道在哪里可以找到它们(在我的grpc文件中,但是我不明白)。如何创建我的对象以及如何查看它所需的参数?因为我不知道两次函数的区别。在

我的文件:

花园2_grpc.py公司公司名称:

# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
import grpc

import garden_pb2 as garden__pb2

class GardenServiceStub(object):
  """Service to manage list of todo tasks
  """

  def __init__(self, channel):
    """Constructor.

    Args:
      channel: A grpc.Channel.
    """
    self.Create = channel.unary_unary(
        '/proto.GardenService/Create',
        request_serializer=garden__pb2.CreateRequest.SerializeToString,
        response_deserializer=garden__pb2.CreateResponse.FromString,
        )
    self.Read = channel.unary_unary(
        '/proto.GardenService/Read',
        request_serializer=garden__pb2.ReadRequest.SerializeToString,
        response_deserializer=garden__pb2.ReadResponse.FromString,
        )
    self.Update = channel.unary_unary(
        '/proto.GardenService/Update',
        request_serializer=garden__pb2.UpdateRequest.SerializeToString,
        response_deserializer=garden__pb2.UpdateResponse.FromString,
        )
    self.Delete = channel.unary_unary(
        '/proto.GardenService/Delete',
        request_serializer=garden__pb2.DeleteRequest.SerializeToString,
        response_deserializer=garden__pb2.DeleteResponse.FromString,
        )
    self.ReadAll = channel.unary_unary(
        '/proto.GardenService/ReadAll',
        request_serializer=garden__pb2.ReadAllRequest.SerializeToString,
        response_deserializer=garden__pb2.ReadAllResponse.FromString,
        )


class GardenServiceServicer(object):
  """Service to manage list of todo tasks
  """

  def Create(self, request, context):
    """Create new todo task
    """
    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
    context.set_details('Method not implemented!')
    raise NotImplementedError('Method not implemented!')

  def Read(self, request, context):
    """Read todo task
    """
    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
    context.set_details('Method not implemented!')
    raise NotImplementedError('Method not implemented!')

  def Update(self, request, context):
    """Update todo task
    """
    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
    context.set_details('Method not implemented!')
    raise NotImplementedError('Method not implemented!')

  def Delete(self, request, context):
    """Delete todo task
    """
    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
    context.set_details('Method not implemented!')
    raise NotImplementedError('Method not implemented!')

  def ReadAll(self, request, context):
    """Read all todo tasks
    """
    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
    context.set_details('Method not implemented!')
    raise NotImplementedError('Method not implemented!')


def add_GardenServiceServicer_to_server(servicer, server):
  rpc_method_handlers = {
      'Create': grpc.unary_unary_rpc_method_handler(
          servicer.Create,
          request_deserializer=garden__pb2.CreateRequest.FromString,
          response_serializer=garden__pb2.CreateResponse.SerializeToString,
      ),
      'Read': grpc.unary_unary_rpc_method_handler(
          servicer.Read,
          request_deserializer=garden__pb2.ReadRequest.FromString,
          response_serializer=garden__pb2.ReadResponse.SerializeToString,
      ),
      'Update': grpc.unary_unary_rpc_method_handler(
          servicer.Update,
          request_deserializer=garden__pb2.UpdateRequest.FromString,
          response_serializer=garden__pb2.UpdateResponse.SerializeToString,
      ),
      'Delete': grpc.unary_unary_rpc_method_handler(
          servicer.Delete,
          request_deserializer=garden__pb2.DeleteRequest.FromString,
          response_serializer=garden__pb2.DeleteResponse.SerializeToString,
      ),
      'ReadAll': grpc.unary_unary_rpc_method_handler(
          servicer.ReadAll,
          request_deserializer=garden__pb2.ReadAllRequest.FromString,
          response_serializer=garden__pb2.ReadAllResponse.SerializeToString,
      ),
  }
  generic_handler = grpc.method_handlers_generic_handler(
      'proto.GardenService', rpc_method_handlers)
  server.add_generic_rpc_handlers((generic_handler,))
```


My client: 

```
# example_consumer.py
import pika, os, time
import grpc
import garden_pb2_grpc
import garden_pb2

# Access the CLODUAMQP_URL environment variable and parse it (fallback to localhost)

url = os.environ.get('CLOUDAMQP_URL', 'amqp://layana:layana321@localhost:5672')
params = pika.URLParameters(url)
connection = pika.BlockingConnection(params)
channel = connection.channel()  # start a channel
channel.queue_declare(queue='garden')  # Declare a queue
grpcChannel = grpc.insecure_channel('https://de.eu')  
stub = garden_pb2_grpc.GardenServiceStub(grpcChannel)  


test = garden_pb2.CreateRequest() #how can i create it ?

def garden_process_function(msg):
    print("Received " + str(msg))
    print("This function can do something")
    time.sleep(1)  # delays for 5 seconds
    feature = stub.Create(test) 
    return;


# create a function which is called on incoming messages
def callback(ch, method, properties, body):
    garden_process_function(body)


class Server(object):
    @staticmethod
    def receiveMsg():
        # set up subscription on the queue
        channel.basic_consume('garden',
                              callback,
                              auto_ack=True)
        # start consuming (blocks)
        channel.start_consuming()
        connection.close()


class App(object):
    @staticmethod
    def run():
        print('Running...')


if __name__ == '__main__':
    App.run()
    Server.receiveMsg()

```
```





How can I create my object and how can I see the arguments it needs? Because there are two times the same function in the file and I don't know the difference between the two.

Tags: selfgrpcresponserequestdefcontextchannelserializer

热门问题