Python, Django и цикл событий (периодические задания)

Я разрабатываю приложение Python для сервера, использующего Django + WSGI + Apache под Debian Linux. Приложение имеет веб-интерфейс, а также интерфейс командной строки (который по-прежнему использует модели django..., просто не использует представления и шаблоны).
Серверная часть базы данных - SQLite3.

Это приложение также должно периодически запускать некоторые задания. Я написал unix-подобный демон, который использует python-gobject и python-glib и выполняет эти задания следующим образом:

gobject.timeout_add_seconds(seconds, someCallback...)
gobject.timeout_add_seconds(seconds, someCallback...)
...
gobject.timeout_add_seconds(seconds, someCallback...)

glib.MainLoop().run()

Я проверил это, и есть некоторые странные проблемы с записанными данными в sqlite db. Я думаю, это потому, что два экземпляра Python читают и пишут из/в одну базу данных sqlite. Один для apache+wsgi и один для моего демона. (Или событие 3 экземпляра Python, когда я использую интерфейс командной строки)

У меня вопрос, что мне посоветуете делать? Поместить эти timeout_add и MainLoop в мой «dj_survey.wsgi» для запуска при запуске apache?


person saeedgnu    schedule 15.02.2012    source источник
comment
Разве сельдерей не был бы вариантом для вас? Функциональность периодических задач вполне подходит для ваших нужд.   -  person LaundroMat    schedule 15.02.2012
comment
Да, я читаю об этом. Но эта тема меня немного усомнила «django celery работает в разработке, терпит неудачу в производстве wsgi, как отлаживать»> stackoverflow.com/questions/8404325/   -  person saeedgnu    schedule 16.02.2012
comment
Так как мне не нужно слишком много функций! Просто что-то минималистское и стабильное.   -  person saeedgnu    schedule 16.02.2012
comment
Позвольте мне изменить вопрос: могу ли я запустить сервер jsonrpc в среде wsgi?   -  person saeedgnu    schedule 16.02.2012
comment
Я видел wsgi-jsonrpc, но боюсь, django не позволяет мне иметь два приложения wsgi!   -  person saeedgnu    schedule 16.02.2012


Ответы (1)


Нет, вы не хотите запускать фоновые процессы внутри вашей среды apache или любой другой среды WSGI.

Запустите их в оболочке и используйте какой-либо метод для связи с вашим фоновым процессом.

person ThiefMaster    schedule 15.02.2012
comment
Спасибо. Какой метод мне следует использовать для связи? (Я полагаю, что не использую D-BUS для сервера!) - person saeedgnu; 15.02.2012
comment
Должен ли я отправлять http-запросы от этого демона на apache/django с локального хоста? (Потому что apache, а затем django отвечает только на эти запросы) - person saeedgnu; 15.02.2012
comment
Или, может быть, мне лучше вообще не использовать WSGI. - person saeedgnu; 15.02.2012