Вот версия Chunker для Python gRPC.Основная логика чанкинга в сервисере реализована с помощью генератора Python.
# server.py
_CHUNKER_SIZE = 4
_DATA_TO_SEND = 'Hello gRPC Python World!'
def _chunk_bytes(data, chunker_size):
index = 0
while index < len(data):
yield chunker_pb2.Chunk(
chunk=data[index:index+chunker_size]
)
index += chunker_size
class Chunker(chunker_pb2_grpc.ChunkerServicer):
@staticmethod
def Chunker(request, unused_context):
return _chunk_bytes(
_DATA_TO_SEND,
_CHUNKER_SIZE)
Клиентская сторона проста.Он получает ответы и объединяет их.
with grpc.insecure_channel('localhost:50051') as channel:
stub = chunker_pb2_grpc.ChunkerStub(channel)
response_iterator = stub.Chunker(empty_pb2.Empty())
received_bytes = bytes()
for response in response_iterator:
received_bytes += response.chunk
print('Concatenated Response:')
print(received_bytes)
Полная версия доступна в Gist: https://gist.github.com/lidizheng/825f1b255767a90fb3a5d4be54071678