내 프로토 파일입니다grpc 불법 선식 : 2 (예상 0)) 여기
syntax = "proto3";
package grpcClient;
service GrpcClient {
rpc GetPeople(PeopleRequest) returns (PeopleResponse) {}
}
message PeopleRequest {
repeated string names = 1; // ex: ['jack', 'marie']
repeated int32 ages = 2; // ex: [18, 24]
}
message PeopleResponse {
repeated Person people = 1;
}
message Person {
string name = 1;
int32 age = 2;
}
그리고 여기 파이썬 스텁 구조입니다 :
from . import grpcClient_pb2
class GrpcClient:
def __init__(self):
server_url = "http://my_url:5001"
secure_channel = make_secure_channel(server_url)
self.__stub = grpcClient_pb2.GrpcClientStub(secure_channel)
def get_people(self, **kwargs):
people_request = grpcClient_pb2.PeopleRequest(**kwargs)
# your test example
try:
serialized_people_request = grpcClient_pb2.PeopleRequest.SerializeToString(people_request)
except Exception as e:
print(e)
else:
print('Serialized to binary of type {} and length {}'.format(type(serialized_people_request), len(serialized_people_request)))
return self.__stub.GetPeople(people_request) # this throw an error
여기 내 grpc 전화입니다 :
grpcClient = GrpcClient()
grpcClient.get_people({ 'names': ['daniel', 'jack'] }) # this is OK
grpcClient.get_people({ 'names': ['daniel', 'jack'], 'ages': [18, 22] }) # this throws
내가 사용 파이썬 3.6 내 핍 packa GES의 버전은 다음과 같습니다
python -m grpc.tools.protoc -I./ --python_out=./ --grpc_python_out=./ ./grpcClient.proto
참고 :
grpcio 1.0.4
grpcio-tools 1.0.4
pip 9.0.1
protobuf 3.1.0.post1
내가이 명령을 사용하여
grpcClient_pb2.py
과
grpcClient_pb2_grpc.py
생성 그리고 여기입니다 자동 생성 된 파이썬 코드 :
_descriptor.FieldDescriptor(
name='names', full_name='PeopleRequest.names', index=0,
number=1, type=9, cpp_type=9, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='ages', full_name='PeopleRequest.ages', index=1,
number=2, type=5, cpp_type=1, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
많은 감사 당신이 도와 줘!
테스트 해 주셔서 감사합니다. 이 티켓에 대한 자세한 내용은 https://github.com/grpc/grpc/issues/9439를 참조하십시오. 예제는 내 코드와 매우 유사합니다. 어쩌면 그것은 다른 python/grpc/protobuf 버전일까요? 지금 당장 키보드를 사용할 필요가 없습니다. 곧 더 조사하겠습니다. – Sulliwane
(python/protobuf/grpcio)를 사용하고있는 버전을 알려주시겠습니까? test_pb2와 test_pb2_grpc는 어떻게 생성합니까? 감사합니다 – Sulliwane
방금 파이썬 3.5, 동일한 오류 던지고와 함께했습니다. 나는 당신의 수입에 대해 궁금합니다.'''test_pb2, import test_pb2_grpc''',''test_pb2_grpc'''는 문제를 일으키는 상단에 많은 중복 수입을 가지고 있습니다, 그래서 나는 그것을 건너 뛰고 사용합니다 스텁 정의는'''''test_pb2''''에서 가능합니다. – Sulliwane