Долгосрочные задачи с Django - PullRequest
10 голосов
/ 04 ноября 2011

Моя цель - создать приложение, которое сможет выполнять долгосрочные, в основном системные задачи, такие как:

  • проверка кода из репозиториев,
  • копирование каталогов между различными локализациями,
  • и т.д.

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

Я искал различные инструменты, такие как RabbitMQ + Celery, Twisted, Pyro, XML-RPC, но я не знаю, подойдет ли мне какой-либо из них. Кто-нибудь сталкивался с подобными потребностями при создании приложения Django? Пожалуйста, дайте мне знать, если есть какие-либо методы / пакеты, которые я должен знать. Примеры кода также приветствуются!

Заранее спасибо за ваши предложения!

(И извините за мой плохой английский. Я работаю над этим.)

Ответы [ 2 ]

7 голосов
/ 04 ноября 2011

По сути, вам нужен процесс, который выполняется за пределами запроса. Абсолютно самый простой способ сделать это (по крайней мере в Unix-подобной операционной системе) - это fork():

if os.fork() == 0:
    do_long_thing()
    sys.exit(0)
… continue with request …

Однако у этого есть некоторые недостатки (например, если сервер выйдет из строя, «длинная вещь» будет потеряна)… Вот где, например, Celery может пригодиться. Он будет отслеживать задания, которые необходимо выполнить, результаты заданий (успех / сбой / что угодно) и упростит запуск заданий на других машинах.

Использование сельдерея с бэкэндом Redis (см. Транспорт Redis Kombu) очень просто, поэтому я бы рекомендовал сначала посмотреть туда.

3 голосов
/ 04 ноября 2011

Вам может понадобиться процесс вне цикла запрос / ответ.В таком случае, я бы посоветовал рассмотреть Celery с Redis-сервером, поскольку он прекрасно интегрируется с Django (как предложил Дэвид Волевер).

Другой вариант - создать команды управления Django , а затем используйте cron для выполнения их через запланированные интервалы.

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