Многопользовательский сервер Python / Twisted - что эффективнее?
-
19-08-2019 - |
Вопрос
В Python, если я хочу, чтобы мой сервер хорошо масштабировался по процессору, мне, очевидно, нужно порождать несколько процессов. Мне было интересно, что лучше (используя Twisted):
A) Процесс диспетчера (тот, который содержит фактические соединения сокетов) помещает полученные пакеты в общую очередь (из многопроцессорного модуля), а рабочие процессы извлекают пакеты из очереди, обрабатывают их и отправляют результаты обратно клиенту.
B) Процесс менеджера (тот, который содержит фактические соединения сокетов) запускает отложенный поток и затем вызывает функцию apply () в пуле процессов. Как только результат возвращается из рабочего процесса, менеджер отправляет результат обратно клиенту.
В обеих реализациях рабочие процессы используют пулы потоков, поэтому они могут работать более чем с одним пакетом одновременно (поскольку будет много запросов к базе данных).
Решение
Я думаю, что B проблематично. Поток будет работать только на одном процессоре, и даже если он запускает процесс, поток все еще работает. А может быть и лучше.
Лучше всего попытаться измерить оба с точки зрения времени и посмотреть, какой из них быстрее, а какой хорошо масштабируется. Тем не менее, я повторю, что я очень сомневаюсь, что B будет хорошо масштабироваться.
Другие советы
Я думаю, что " A " это ответ, который вы хотите, но вам не нужно делать это самостоятельно.
Рассматривали ли вы ампулу ?