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

deikduxw  于 2023-10-21  发布在  Python
关注(0)|答案(1)|浏览(162)

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

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

message Chunk {
    bytes data_part = 1;
}

我不能一次发送超过4MB的数据,因为TCP连接有限制。以下是我的代码(仅相关部分):

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

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

    yield dataBytes

我如何以4MB的块发送此数据?
另外,json.dumps()大数据然后流是一个好的做法吗?任何帮助都是感激不尽的。

huwehgph

huwehgph1#

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

def GetGeoCoordinates(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

这个答案对我帮助最大Chunking in gRPC with Python

相关问题