Python, Django и цикл обработки событий (периодические задания) - PullRequest
1 голос
/ 15 февраля 2012

Я разрабатываю приложение 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?

1 Ответ

3 голосов
/ 15 февраля 2012

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

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

...