es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Transmisión de datos en gRPC python con solicitud de iterador pero obtengo “¡Excepción al iterar las solicitudes!”

Intenté usar gRPC python para realizar una comunicación de transmisión bidireccional, pero hay un problema en la solicitud del lado del cliente…

Aquí está mi prototipo:

service ABC {
    rpc DataTransmission (stream DataTransmissionRequest) returns (stream DataTransmissionResponse);
}

Mensaje DataTransmissionRequest {
bytes data = 1;
string ticket = 2;
}

Mensaje DataTransmissionResponse {
bytes data = 1;
}

Aquí está el código del cliente para generar una solicitud de iterador y llamar a la función dataTransmission:

def generateRequests():
        req_msgs = [
            (b"123", "sySJZDV9Rb8dyqt1"),
            (b"123"),
            (b"123"),
            (b"123"),
            (b"123"),
            (b"123"),
        ]
        iter = 0
        for (req, ticket) in req_msgs:
            print("(req, ticket) =", (req, ticket))
            if iter == 0:
                request = ABC_pb2.DataTransmissionRequest(data=req, ticket=ticket)
            else:
                request = ABC_pb2.DataTransmissionRequest(data=req)
            iter += 1
            print("iter =", iter)
            yield request

#my_queue = queue.SimpleQueue()
with grpc.insecure_channel(addr) as channel:
    stub = ABC_pb2_grpc.ServiceProxyStub(channel)

    data_transmission_resp = stub.DataTransmission(generateRequests())
    print("data_transmission_resp =", data_transmission_resp)
    ##print("data_transmission_resp =", list(data_transmission_resp))
    ## use the results
    for data_trans in data_transmission_resp:
        print(data_trans)

Pero obtuve el siguiente error:

grpc.channel.MultiThreadedRendezvous: <multithreadedrendezvous of rpc that terminated with:
        status = statuscode.unknown
        details = "exception iterating requests!"
        debug_error_string = "none"

¿por qué ocurre este error? y ¿es esta la forma correcta de usar la comunicación bidireccional grpc en python?

luego, hay algunos mensajes que mencionan el siguiente método:

    my_queue = queue.simplequeue()
    with grpc.insecure_channel(addr) as channel:
        stub = abc_pb2.grpc.serviceproxystub(channel)

    my_queue.put(generaterequests())
    data_transmission_resp = stub.datatransmission(iter(my_queue.get, none))

también obtengo el mismo error… of=”” rpc=”” that=”” terminated=”” with:=”” status=”StatusCode.UNKNOWN” details=”Exception iterating requests!” debug_error_string=”None” ="" ¿por="" qué="" ocurre="" este="" error?="" y="" ¿es="" esta="" la="" forma="" correcta="" de="" usar="" la="" comunicación="" bidireccional="" grpc="" en="" python?="" luego,="" hay="" algunos="" mensajes="" que="" mencionan="" el="" siguiente="" método:=""=”” my_queue=”queue.SimpleQueue()” with=”” grpc.insecure_channel(addr)=”” as=”” channel:=”” stub=”ABC_pb2.grpc.ServiceProxyStub(channel)” my_queue.put(generaterequests())=”” data_transmission_resp=”stub.DataTransmission(iter(my_queue.get,” none))=”” “`=”” también=”” obtengo=”” el=”” mismo=””></multithreadedrendezvous of rpc that terminated with:
status = statuscode.unknown
details = “exception iterating requests!”
debug_error_string = “none”


¿por qué ocurre este error? y ¿es esta la forma correcta de usar la comunicación bidireccional grpc en python? luego, hay algunos mensajes que mencionan el siguiente método:
my_queue = queue.simplequeue()
with grpc.insecure_channel(addr) as channel:
    stub = abc_pb2.grpc.serviceproxystub(channel)

my_queue.put(generaterequests())
data_transmission_resp = stub.datatransmission(iter(my_queue.get, none))

“`

también obtengo el mismo error…>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que hay un problema al iterar las solicitudes en el código del cliente. El mensaje de error “¡Excepción al iterar las solicitudes!” sugiere que hay un problema al iterar a través de las solicitudes generadas por la función generateRequests().

    Una posible solución a este problema es usar una cola para pasar las solicitudes a la función DataTransmission. El fragmento de código que has publicado que utiliza una cola (my_queue) parece ir en la dirección correcta, pero es posible que no funcione como se espera debido a algunos problemas con la generación y el paso de las solicitudes a través de la cola.

    En cuanto a si esta es la forma correcta de utilizar la comunicación bidireccional gRPC en Python, es difícil decirlo sin conocer los requisitos específicos de tu caso de uso. Sin embargo, utilizar la palabra clave stream en la función DataTransmission y generar un iterador de solicitudes utilizando la función generateRequests() es una forma correcta de configurar la comunicación de streaming bidireccional en gRPC.

Comments are closed.