Как заставить многопроцессорную работу на клиент-серверной платформе gRPC для веб-сканирования? - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь собрать веб-сканер на python, используя gRPC.Я включил функции сканирования в файл сервера и использую клиент для запроса списка URL-адресов от пользователя и отправки его на сервер для очистки.Каждый URL занимает около 25-30 секунд, чтобы очистить.Итак, я хочу использовать многопроцессорность для ускорения процесса, т.е. извлечения информации из N URL-адресов с использованием N ядер параллельно.Как мне продолжить?Скажем, у меня есть 4 ядра: возможно ли реализовать 4 вызова клиента к серверу на 4 разных ядрах?Или я должен создать пару сервер-клиент отдельно на каждом ядре?Или я могу создать 4 экземпляра сервера с разными канальными портами и выполнить их на 4 ядрах?

Я новичок во всем этом.Так что я мог бы использовать любую помощь в этом.

1 Ответ

0 голосов
/ 23 января 2019

Простым anser является то, что вы можете запустить четыре процесса сервера gRPC, используя один и тот же порт.Порт tcp gRPC по умолчанию включает опцию сокета SO_REUSEPORT , что означает, что весь трафик, поступающий на общий порт, будет сбалансирован по нагрузке для всех процессов прослушивания.Таким образом, сервер gRPC может использовать всю вычислительную мощность без ограничения GIL.

Если вы предпочитаете запускать серверы в одном процессе, я рекомендую вам использовать библиотеку multiprocessing ( doc ).

Что касается клиента gRPC, нагрузка не так высока, вы можете использовать threading для достижения параллелизма или вы можете использовать multiprocessing для использования большего количества ЦП.

...