Python: DJango, как владеть длительным процессом бега? - PullRequest
0 голосов
/ 24 марта 2011

Итак, у меня есть фоновый процесс, который мне нужно выставить / контролировать как веб-сервис.Я завернул процесс, чтобы иметь возможность принимать команды через канал, но сейчас пытаюсь выяснить, как им управлять.

Требования следующие:

  1. Требуетсявозможность запуска процесса через Интернет
  2. Необходимо иметь возможность отправлять cmds
  3. Необходимо иметь возможность возвращать результаты из cmds
  4. Процесс, который был запущен, жив, пока не будет уничтожен1012 *

Я думаю, что главный вопрос в том, как мне получить Django для управления процессом?Собственно в этом смысле сохраняйте действительный канал сохранения для будущего взаимодействия с фоновым процессом.Прямо сейчас это что-то вроде (просто пример):

if __name__ == '__main__':
 to_process_pipe, process_pipe = Pipe()
 node = PFacade(process_pipe)
 p.start()

 to_process_pipe.send(['connect'])
 print to_process_pipe.recv()

 p.killed = True
 p.join()

Я думаю, что мне нужен лучший способ общаться, потому что я не уверен, как я мог бы сохранить Трубу в DJango.


И, пожалуйста, если вы собираетесь ответить с использованием сельдерея, пожалуйста, дайте мне хорошее объяснение того, как.

Ответы [ 3 ]

0 голосов
/ 24 марта 2011

хорошо, значит, вы хотите, чтобы процесс был запущен и принимал команды от рабочих django?

В таком случае сельдерей не будет хорошим решением, так как он не обеспечивает связь после задача создается.

ИМХО хорошим решением будет иметь демон (реализованный как команда управления django) с бесконечным основным циклом, некоторое время ожидания между запусками, прослушивание команд из определенной очереди.

Для общения - Комбу / Джанго-Комбу будет отличным (это было частью сельдерея).

0 голосов
/ 29 января 2012

Мое окончательное решение было написать собственный «почтовый ящик» на основе pidbox.Mailbox. Их реализация была ужасно нарушена, но алгоритм был надежным.

Я в основном поддерживал REST API, размещенный через django, а затем оставил api rest отправлять сообщение в очередь AMQP (реализация QPID).

Затем у меня был процесс, который сидит, отслеживает очереди и выполняет любые команды по мере их поступления.

Это сработало хорошо и было довольно круто, когда собралось вместе.

0 голосов
/ 24 марта 2011

Может быть Celery (очередь асинхронных задач / очередь заданий на основе распределенной передачи сообщений) соответствует вашему счету.

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