protocol-buffers - 如何在 Protocol Buffers 中表示一个二维数组?
问题描述
例如:
[[1,2],[3,4]...]
我只是想测试一下RPC是否支持二维数组,但是有问题,我正在关注官方文档。
服务器如下:
data = [[i, 9] for i in range(128)]
class Greeter(hello_pb2_grpc.GreeterServicer):
def SayHello(self, request, context):
return hello_pb2.HelloReply(results=data)
def serve():
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10), options=[
(cygrpc.ChannelArgKey.max_send_message_length, -1),
(cygrpc.ChannelArgKey.max_receive_message_length, -1)
])
hello_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
server.add_insecure_port('[::]:50052')
server.start()
try:
while True:
time.sleep(_ONE_DAY_IN_SECONDS)
except KeyboardInterrupt:
server.stop(0)
if __name__ == '__main__':
serve()
客户端如下:
def insecure_channel(host, port):
channel = grpc.insecure_channel(
target=host if port is None else '%s:%d' % (host, port),
options=[(cygrpc.ChannelArgKey.max_send_message_length, -1),
(cygrpc.ChannelArgKey.max_receive_message_length, -1)])
return grpc.beta.implementations.Channel(channel)
def run():
channel = grpc.insecure_channel('localhost:50052')
stub = hello_pb2_grpc.GreeterStub(channel)
st = time.time()
response = stub.SayHello(hello_pb2.HelloRequest(name='test'))
et = time.time() - st
print("Greeter client received: {}, {}".format(type(response.results), et))
if __name__ == '__main__':
run()
protobuf 定义如下:
syntax = "proto3";
package hello;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
repeated Result results = 1;
}
message Result {
repeated int32 index = 1;
repeated int32 count = 2;
}
但我得到这样的错误:
File "greeter_server.py", line 19, in SayHello
return hello_pb2.HelloReply(results=data)
TypeError: Parameter to MergeFrom() must be instance of same class: expected hello.Result got list.
我正在使用python3。
提前致谢。
解决方案
根据您的问题,[[1,2],[3,4]...]
是一个数组数组。
这样的事情应该可以解决您的问题
message InternalArray {
repeated int internal_array = 1;
}
repeated internal_array array = 1;
推荐阅读
- firebase - 集合组查询中的 Firestore 单个字段索引的 JSON 格式是什么?
- python - 在数据框中添加条目以进行反向索引顺序
- msbuild - 最新检查声称自 VS 2019 以来缺少构建输出
- .net - IIS 未在所有绑定上运行应用程序
- python - 尝试将LabVIEW dll调用到调用CAN协议的python中
- firebase - Firestore 文档的最大字段数?
- r - 找不到在 for 每个循环中声明的函数
- scala - 在 scala 函数中按名称参数调用
- android - Flutter 中的 AndroidManifest 中缺少默认通知通道元数据
- keycloak - 那么如何用不同的java启动keycloak在系统中