Многопользовательский сервер Python / Twisted - что эффективнее?

StackOverflow https://stackoverflow.com/questions/471660

  •  19-08-2019
  •  | 
  •  

Вопрос

В Python, если я хочу, чтобы мой сервер хорошо масштабировался по процессору, мне, очевидно, нужно порождать несколько процессов. Мне было интересно, что лучше (используя Twisted):

A) Процесс диспетчера (тот, который содержит фактические соединения сокетов) помещает полученные пакеты в общую очередь (из многопроцессорного модуля), а рабочие процессы извлекают пакеты из очереди, обрабатывают их и отправляют результаты обратно клиенту.

B) Процесс менеджера (тот, который содержит фактические соединения сокетов) запускает отложенный поток и затем вызывает функцию apply () в пуле процессов. Как только результат возвращается из рабочего процесса, менеджер отправляет результат обратно клиенту.

В обеих реализациях рабочие процессы используют пулы потоков, поэтому они могут работать более чем с одним пакетом одновременно (поскольку будет много запросов к базе данных).

Это было полезно?

Решение

Я думаю, что B проблематично. Поток будет работать только на одном процессоре, и даже если он запускает процесс, поток все еще работает. А может быть и лучше.

Лучше всего попытаться измерить оба с точки зрения времени и посмотреть, какой из них быстрее, а какой хорошо масштабируется. Тем не менее, я повторю, что я очень сомневаюсь, что B будет хорошо масштабироваться.

Другие советы

Я думаю, что " A " это ответ, который вы хотите, но вам не нужно делать это самостоятельно.

Рассматривали ли вы ампулу ?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top