при использовании сервера python grpc,
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
это общий способ создания экземпляра сервера grpc. Но при этом, если я попытаюсь запустить более 10 экземпляров клиента, который ожидает потоковую передачу сервера, 11-й не будет работать (у меня запущено 10 экземпляров клиента, которые подключаются к этому серверу и получают поток)
Даже если я изменю max_workers на None, max будет создано 40 потоков (8 ядер x 5 согласно документации), так что в этом случае одновременно может обслуживаться не более 40 клиентов.
Это ожидаемое поведение?
Я работал над своим кодом, но попытался использовать общий код python grpc, описанный здесь:
https://grpc.io/docs/tutorials/basic/python.html
Я могу воспроизвести ту же проблему с этим.
Чтобы воспроизвести это, просто запустите route_guide_server.py
в одном окне с max_workers = 4, а затем попробуйте запустить 4-5 разных клиентов в разных окнах. Четвертому клиенту придется дождаться завершения работы одного из клиентов. (Чтобы улучшить обзор, добавьте time.sleep в yield)
Если большое количество клиентов (100 и 1000 клиентов) хотят получить доступ к серверу grpc на Python с потоковой передачей (которая должна быть непрерывной), то у клиентов больше никогда не будет шансов.