Я настраиваю gunicorn (контролируется супервизором и находится за интерфейсом nginx) и немного запутался в выборе оптимального количества процессов для настройки.
в документация ясно объясняется, что:
workers = multiprocessing.cpu_count() * 2 + 1
Моя машина - четырехъядерная, так что она рассчитана на 9 рабочих.
Но я хочу бежать несколько приложения, каждое из которых прослушивает другой порт.
Если счет будет (усечен):
workers_per_application = int(workers / NUM_APPLICATIONS)
Или у каждого должно быть указанное выше количество рабочих?
Я думаю, что этот вопрос действительно применим не только к Gunicorn, но и ко всем подобным прослушивающим серверам ...
Честно говоря, worker_per_application - это скорее настройка производительности, чтобы ваше приложение жестяная банка потребляют 100% ЦП в любое время. Это не значит, что будет. Вы можете настроить все свои приложения на 9 рабочих ... при условии, что вы помните, что существует вероятность того, что одно приложение может работать над чем-то очень сложным, что приведет к тому, что другое будет отставать / не отвечать вовремя . Вся штука "cpu_count () * 2 + 1" в лучшем случае является предложением ... и вы можете добавить к нему больше ... или меньше, если сочтете необходимым. Я не уверен, возвращает ли cpu_count () количество физических процессоров ... или количество ядер процессора. Четырехъядерный + гиперпоточность может показаться 8 ядрами, которые будут преобразованы как 17 процессов ... или это может считаться только 1 ... преобразованием как 3 процесса. Поиграйте с ним и посмотрите, что произойдет.
Вы можете установить для этого жесткое число, если хотите, чтобы два приложения работали одинаково хорошо, не замечая большого отставания, вызванного другим.