Реализация многопроцессорного сервера на Python с помощью Twisted - PullRequest
8 голосов
/ 20 мая 2011

Я должен написать сервер с привязкой к процессору на Python, чтобы распределить рабочие нагрузки по многим ядрам.Я хочу использовать Twisted в качестве сервера (запросы поступают через TCP).

Есть ли лучшие варианты - возможно, с использованием ампулы?Я также видел статью, использующую Twisted pb для связи, в сочетании с Popen - или, возможно, объединить ее с multiprocessing?

1 Ответ

10 голосов
/ 20 мая 2011

Ампула - это хороший строительный блок для многопроцессорного сервера с процессором. Он использует более простой протокол AMP, а не PB (сложность которого обычно не требуется просто для перемещения данных задания в другой процесс и последующего извлечения результатов). Он обрабатывает создание процессов, управление временем жизни, перезапуск и т. Д.

Обычно вы хотите избегать использования Popen или multiprocessing стандартного библиотечного модуля, если вы используете Twisted. Они могут сотрудничать, но оба они представляют API-интерфейсы, ориентированные на блокировку, которые в какой-то степени отрицают цель использования Twisted. API собственного дочернего процесса Twisted, reactor.spawnProcess, также способен и предотвращает блокировку. Ампула основана на этом.

Ампула не так широко используется, как multiprocessing. Возможно, вы обнаружите некоторые странности в вашей среде разработки или развертывания. Я не думаю, что это будут препятствия, которые вы не сможете преодолеть. Я разработал сервис, который использовал Ampoule для распределения работы по анализу большого количества HTML на несколько процессоров, и в конце концов он работал нормально. Если вы столкнетесь с какими-либо проблемами, я призываю вас сообщить о них выше по течению ! В конце концов, я бы хотел сказать, что Ампула так же крепка, как и все (или даже больше), вместо того, чтобы прикрепить заявление об отказе от ее использования. :)

...