2016-06-09 7 views
1

Ich verwende eine einfache Python-Server-Anwendung mit Grpc. Dies ist der Server-Code:GRPC: Remote-Fehler und fehlende Parameter von der Nachricht

Klasse Classifier (grpc_cl.BetaClassifierServicer):

def __init__(self): 
    default_config = self.getDefaultConfig() 
    self.engine_config = default_config["engine"] 
    self.port = default_config["daemon"]["port"] 
    # self.engine = loadLSTM3Model(self.engine_config) 

def getDefaultConfig(self): 
    with open("service.properties.yaml", "r") as stream: 
     default_config = yaml.load(stream) 
    return default_config 

def Analyze(self, request, context): 
    file_name = request.sentences_file 
    print "This is the file to analyze ", file_name 
    error = grpc_cl.Error(error_code = 0, error_message = "OK") 

    return grpc_cl.CategoryReply(error) 

Der Kunde:

channel = implementations.insecure_channel('localhost', 50051) 
stub = classifier_grpc.beta_create_Classifier_stub(channel) 
reply = stub.Analyze(classifier_grpc.CategoryRequest(user_context=1, sentences_file="file"), 10000) 
print 'Answer', reply.error.error_message 

Und die .proto Datei mit den Meldungen:

syntax = "proto3"; 

service Classifier{ 
    rpc Analyze(CategoryRequest) returns (CategoryReply){} 
    rpc Train(TrainRequest) returns (CategoryReply){} 
} 

message CategoryRequest{ 
    int32 user_context = 1; 
    string sentences_file = 2; 
} 
message CategoryReply{ 
    Error error = 1; 
    string categories_file = 2; 
} 
message Error{ 
    int32 error_code = 1; 
    string error_message = 2; 
} 

Das Starten des Servers und des Clients und das Verbinden beider mit dem entsprechenden Port gibt mir diesen Fehler:

Traceback (most recent call last): 
    File "/home/~/service/client.py", line 19, in <module> 
    reply = stub.Analyze(classifier_grpc.CategoryRequest(user_context=1, sentences_file="file"), 10000) 
    File "/usr/local/lib/python2.7/dist-packages/grpc/framework/crust/implementations.py", line 73, in __call__ 
    protocol_options, metadata, request) 
    File "/usr/local/lib/python2.7/dist-packages/grpc/framework/crust/_calls.py", line 109, in blocking_unary_unary 
    return next(rendezvous) 
    File "/usr/local/lib/python2.7/dist-packages/grpc/framework/crust/_control.py", line 412, in next 
    raise self._termination.abortion_error 
grpc.framework.interfaces.face.face.RemoteError 

Tut jemand jetzt warum das passiert? Außerdem könnte ich den user_context aus der CategoryRequest extrahieren, aber nicht die sets_file Zeichenfolge, die leer ist.

Antwort

1

zeigt an, dass beim Verarbeiten der Anforderung eine Ausnahme auf dem Server aufgetreten ist.

In Ihrem Fall müssen protobuf Parameter Schlüsselwort angegeben werden, dh

return grpc_cl.CategoryReply(error)

sollte

return grpc_cl.CategoryReply(error=error)

+0

Was die sentences_file fehlt, ich Ihre print-Anweisung glauben falsch, führt Sie zu dieser Schlussfolgerung. 'print 'Dies ist die zu analysierende Datei {}". format (file_name) 'sollte funktionieren. – kpayson64