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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 23 января 2009

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

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

1 голос
/ 01 февраля 2009

Я думаю, что «А» - это ответ, который вы хотите получить, но вам не нужно делать это самостоятельно.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...