如何使用 python(通过 grpc)以 4MB 块的形式传输数据

问题描述 投票:0回答:1

我有一个 python grpc 服务,可以将大量数据传输到客户端微服务。

service GeoService {
   rpc GetGeoCoordinates(GetRequest) returns (stream Chunk){}
}

message Chunk {
    bytes data_part = 1;
}

我无法一次发送超过 4MB 的数据,因为 tcp 连接有限制。这是我的代码(仅相关部分):

def CheckCoordinatesStreamV2(self, request, context):
    ...
    ...

    dataBytes = geo_pb2.Chunk(data_part=bytes(json.dumps(coordinates["data"]), 'utf-8'))

    yield dataBytes

如何以 4MB 块的形式发送这些数据?

json.dumps()
大数据然后流式传输也是一个好的做法吗?如有任何帮助,我们将不胜感激。

python python-3.x stream grpc-python
1个回答
0
投票

在深入研究并查看许多答案后,我终于实现了我的预期:

 def CheckCoordinatesStreamV2(self, request, context):
    CHUNK_SIZE = 1024 * 1024 * 4     # 4 mb
    ...
    ...
    
    # convert data to bytes
    dataBytes = bytes(json.dumps(coordinates["data"]), 'utf-8')

    # stream in 4MB chunks
    index = 0
    while index < len(dataBytes):
        yield geo_pb2.Chunk(
            data_part=dataBytes[index:index+CHUNK_SIZE]
        )
        index += CHUNK_SIZE

这个答案对我帮助最大用Python在gRPC中进行分块

© www.soinside.com 2019 - 2024. All rights reserved.