Какова цель ThreadPoolExecutor в grpc сервере? - PullRequest
0 голосов
/ 27 марта 2019

Когда мы создаем экземпляр сервера gRPC, мы передаем ThreadPoolExecutor его конструктору:

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

Как я знаю, в Python есть GIL, который делает бесполезным использование потоков для задач, связанных с процессором.

Например, мой сервер gRPC обслуживает модель Tensorflow и службу проверки работоспособности gRPC. Есть ли у меня какие-либо преимущества для увеличения количества потоков в пуле потоков?

1 Ответ

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

прямо сейчас grpc python связан с пулом потоков одновременных фьючерсов, я думаю, что в будущем будет показана дорожная карта, в которой мы сможем использовать asyncio.Исполнитель пула потоков просто позволяет нам указать максимальное количество одновременных соединений.Вы правы, что в python у нас есть GIL, в результате потоки ограничены одним и тем же ядром ЦП, поэтому у нас нет параллелизма с потоками.Если ваши задачи связаны с процессором, они не выигрывают в python, добавляя больше потоков.

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

...