grpc-Python max_workers, ограничивающий количество одновременных процессов - PullRequest
1 голос
/ 25 марта 2019

при использовании сервера python grpc,

server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))

- это общий способ создания сервера grpc.Но при этом запуске, если я пытаюсь запустить более 10 экземпляров клиента, который ожидает потоковую передачу с сервера, одиннадцатый не работает (я запускаю 10 экземпляров клиента, который подключается к этому серверу и получает поток)

Это нормальное поведение?Поскольку, даже если я изменяю max_workers на None, он создает не более 40 потоков (8 ядер x 5 в соответствии с документацией), поэтому в этом случае можно одновременно обслуживать до 40 клиентов.

Даже если я изменю max_workers на NoneМаксимальное количество создаваемых файлов составляет 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 в доходность)

Если большое количество клиентов (100 и 1000 клиентов)) хотите получить доступ к серверу grpc в python с потоковой передачей (которая должна быть непрерывной), тогда клиенты больше никогда не получат шанс.

1 Ответ

1 голос
/ 26 марта 2019

Да, это ожидаемое поведение.

После запуска моего собственного тестового кода, да, если вы предоставляете аргумент None для max_workers, тогда 40 - это максимум. Однако, если я установлю максимальное значение до 100, тогда, конечно, у меня будет максимум 100 одновременно работающих. Это должно быть ожидаемое поведение, потому что пул потоков создается на основе числа запрошенных рабочих. Вы не можете ожидать, что, если вы не предоставите количество максимальных рабочих, оно будет только увеличиваться и уменьшаться во время выполнения. Не обойдется без изменения grpc и пула одновременных фьючерсов. С учетом того, как интерфейс связан, в python grpc сейчас мы должны использовать параллельный фьючерсный пул потоков, поэтому мы должны предоставить аргумент max_workers, если мы хотим, чтобы он был больше 40, и он должен быть установлен во время компиляции.

...