-
Здравствуйте!
Пишу почтовую рассылку на Джанге (не спам), нужно сделать 2 долгоиграющих процесса - генерация сообщений и отправка.
Как лучше это сделать? Пока что мои процессы отваливаются по таймауту.
Допустим, можно запустить еще один процесс, как его сделать независимым от таймаута браузера? Чем его запускать, popen, exec?
Помогите, кто сталкивался, нужно срочно сделать, а времени на эксперименты нет.
Спасибо -
Обычно это просто делают вообще без участия веба — по cron'у или вечноживущим отдельнымпроцессом. Вебная часть записывает в очередь, что надо разослать, а отдельный процесс ее разгребает.
-
Да, я помню старый тред в этом форуме. Вопрос был очень похожим, равно как и ответ :)
Меня сейчас больше интересует практический аспект. Как в python сделать отдельный вечноживущий процесс, с джанговским окружением?
Можно ли через запуск popen добавить задание в крон? Например у меня нет сообщений на отправку, соответственно к кроне нет заданий. Появились сообщения - добавилось задание крона (хочу реализовать отправку мгновенную и отложенную - через минуту, например, или в четко заданное время). -
Это два разных вопроса...
Вечный процесс — это просто питонья программа, которая может или просыпаться раз в минуту, или слушать сигналы через какую-нибудь межпроцессную очередь (stompserver, 0mq, beanstalkd, simple-thrift-queue — это дико модно, кстати :-) ) или через сокет. Создать в ней джанговское окружение очень просто:
import settings from django.core.management import setup_environ setup_environ(settings)А можно еще реализовать это джанговской командой и запускать через
./manage.py ..., тогда окружение в ней будет сразу.В крон динамически ничего не добавляют обычно. Он просто раз в какое-то время запускает скрипт, который что-то делает. Фактически, крон и есть такой вот уже написанный процесс из первого пункта, но он, правда, мгновенно реагировать ни на что не будет.
-
Буквально вчера нашел достаточно удобный сниппет для запуска Джанговоского окружения из консольного скрипта - http://www.djangosnippets.org/snippets/374/
-
Это, кажется, очень старый какой-то способ. Тех трех строчек, что я привел вышел, вполне достаточно.
-
Не достаточно. В сниппете перед вызовом setup_environ дополнительно настраиваются переменные окружения, чтобы можно было найти settings.py (да и остальные модули проекта тоже).
-
Собственно команда для manage.py более красивое решение, но не всегда хочется с этим возиться. :)
-
я нашел еще django-extensions http://code.google.com/p/django-command-extensions/
видимо, это и есть реализованная команда для manage.py о которой так долго говорили большевики :) -
+1 за django-command-extensions.
С ним просто пишутся задачи для крона. Остается только запустить, как:
0 * * * * /home/user/project/manage.py runjobs hourly
Это пример крона, запускающегося раз в час. -
или слушать сигналы через какую-нибудь межпроцессную очередь или через сокет.
А ещё забыли про D-Bus и иже с ним :)





