Protobuf数组类型的简单使用

背景:python环境下 Triton Inference Server,深度学习模型部署,采用grpc协议

使用repeated字段定义

一维:

// 返回信息
     message ProcessResult {
            repeated int64 input_ids = 1;
            repeated int64 attention_mask = 2;
            repeated int64 token_type_ids = 3;
}

赋值: 直接通过proto对象存根对象访问赋值或者用append添加

object.ProcessResult(input_ids=result[0],attention_mask=result[1],token_type_ids=result[2])

二维:

message ProcessingReply {
    message Result{
        repeated float processdata = 1;
    }
    repeated Result result = 1;
}

赋值:复合类型不能直接使用append赋值,需要用proto存根对象访问repeated外层字段获取add()对象,由于内层也是数组,所以再用extend添加list对象

        ###processing_result是要赋值给数组的数据

        #二维数组输入protobuf

        for i in range(len(processing_result)):

            d = response.result.add()

            d.processdata.extend(processing_result[i])

输出:

 #protobuf二维数组输出

        data = []

        for i in response.result:

            datatmp = []

            for j in i.processdata:

                datatmp.append(j)

            data.append(datatmp)

        data = np.array(data)#转换后供后续接口使用

供参考:python序列化proto时对repeated修饰数据进行赋值(常用类型和其他类型)

你可能感兴趣的:(python,开发语言)