Проблема производительности, которую вы описали, звучит как проблема параллелизма. Сервер gRP C Python использует ThreadExecutor для обработки RPC, и увеличение числа рабочих должно позволять большее число одновременных RP C.
grpc.server(futures.ThreadPoolExecutor(max_workers=1000))
Для вопроса 2 профилировщики cProfile, yep и perf
являются мощными инструментами для устранения проблем с производительностью.
Для вопроса 3 размер ответа не имеет большого значения (на уровне КБ).
Вкл С другой стороны, мы работаем над AsyncIO-версией gRP C Python. Он значительно повышает производительность и решает ограниченную параллельную проблему RP C. Пока это экспериментально, но не стесняйтесь попробовать.
from grpc.experimental import aio
class Servicer(...):
async def ServerStreamingMethodHandler(...):
for ...:
yield response
async def startServer():
global server
server = aio.server()
servicer_grpc.add_Servicer_to_server(Servicer(), server)
server.add_insecure_port('[::]:' + str(port))
await server.start()