Apache + mod_wsgi + постоянное приложение Python - я думаю, что мне не хватает части - PullRequest
3 голосов
/ 24 февраля 2012

Ubuntu 11.10, Python 2.6.Предыстория: у меня есть существующее приложение Python, которое использует Twisted, чтобы сидеть в цикле и ждать поступления команд RESTful. Таким образом, приложение запускается, запускает потоки, которые выполняют различные действия, и main устанавливает обратные вызовы для Twisted, а затем вызываетTwisted.reactor.run (), который блокирует навсегда.Когда приходит запрос, вызывается соответствующий обработчик, все происходит, ответ отправляется обратно.

Моя задача сейчас удалить Twisted, потому что руководство решило, что им это не нравится.Мы переходим на Apache в качестве нашего веб-сервера.

Используя документацию, я успешно установил и настроил Apache2.0 для обслуживания веб-страниц.Я также установил mod_wsgi и смог настроить его и Apache для выполнения произвольного кода Python при поступлении запроса. Так что у меня все хорошо.

Что мне не хватает, так это как подключить мой Pythonприложение к битам Apache / mod_wsgi, поскольку приложение должно быть постоянным и всегда работающим.Было предложено открыть канал между сценарием wsgi и основным приложением и сериализовать запросы таким образом.Но кажется, что это то, что должно быть уже там, я просто не знаю достаточно, чтобы знать, что искать.

Любые толчки в правильном направлении очень ценятся.

Далее отредактируйте для ясности: я не делаю веб-сервер.Данное приложение является хост-приложением, работающим на виртуальной машине.Он управляется интерфейсом RESTful через HTTP.Поэтому все, что ему нужно сделать, это уметь прослушивать входящие команды и отвечать на них.

mod_wsgi не может быть подходящим инструментом для этой работы, и это хорошо, я просто не знаю, что это такое.

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

Достаточно ли в вашем случае режима демона mod_wsgi?Или, если вы хотите запустить основной процесс отдельно от Apache, как насчет mod_fastcgi?Возможно, можно использовать Apache в качестве обратного прокси-сервера.

0 голосов
/ 25 февраля 2012

Было предложено открыть канал между сценарием wsgi и основным приложением и сериализовать запросы таким образом.

Для этого предназначены многопроцессорные очереди.

http://docs.python.org/library/multiprocessing.html

http://docs.python.org/library/multiprocessing.html#pipes-and-queues

Вы будете еще счастливее, если начнете использовать Сельдерей .

Celery позволит вам «удалить Twisted, потому что руководство решило, что им это не нравится».

Тем не менее. Переключение на сельдерей означает, что такие вещи, как «Итак, приложение запускается, запускает потоки, которые делают разные вещи, и main устанавливает обратные вызовы для Twisted, а затем вызывает Twisted.reactor.run (), который блокирует навсегда», все должны быть полностью переосмыслены , Вместо некоторого основного цикла опроса теперь у вас есть несколько независимых процессов, которые координируются сельдереем.

Что вы найдете, так это всю домашнюю работу в вашем приложении - вся координация между потоками - обратные вызовы - все это - исчезнет. У вас останется несколько скриптов Python, которые выполняют «реальную работу», и Celery для управления распределенной очередью задач.

...