我有一个 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()
大数据然后流式传输也是一个好的做法吗?如有任何帮助,我们将不胜感激。
在深入研究并查看许多答案后,我终于实现了我的预期:
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中进行分块