Правильный способ иметь поток параллельно проекту django на wsgi - PullRequest
2 голосов
/ 31 мая 2010

Я пишу проект django, и мне нужен параллельный поток, который выполняет определенные задачи.

Проект будет развернут в Apache2.2 с mod_wsgi.

На самом деле моя реализация состоит из потока с , тогда как True - Sleep , который вызывается из моего django.wsgi файла.

Правильна ли эта реализация?

Возникают две проблемы: вызывается ли django.wsgi только один раз? Будет ли запущен только этот экземпляр потока? И во-вторых, мне нужно «вручную» посетить хотя бы страницу, чтобы запустить поток. Есть ли обходной путь?

У кого-нибудь есть подсказки по лучшим решениям?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 01 июня 2010

Что касается вашего запроса об обходе необходимости создания запроса на создание потока, у вас есть два варианта. Первый - использовать директиву WSGIImportScript для предварительной загрузки файла сценария WSGI при запуске. Второе - добиться того же, используя параметры группы процессов и группы приложений для WSGIScriptAlias.

Второй способ предпочтительнее. Вы также хотите убедиться, что используете режим демона, чтобы при изменении файла сценария WSGI весь процесс перезагружался. Если вы используете встроенный режим и файл сценария WSGI изменился, просто перезагрузите сценарий, и вы создадите второй фоновый поток.

Таким образом, для использования в режиме демона:

WSGIDaemonProcess mysite
WSGIScriptAlias / /some/path/django.wsgi process-group=mysite application-group=%{GLOBAL}

То, что параметры группы процессов и группы приложений явно предоставляются в WSGIScriptAlias, имеет побочный эффект предварительной загрузки файла сценария WSGI при запуске процесса до поступления каких-либо запросов.

Обратите внимание, что вы должны использовать mod_wsgi 3.0 или более позднюю версию для этой последней возможности предоставления опций WSGIScriptAlias ​​для достижения этой цели.


ОБНОВЛЕНИЕ 1

Если вы работаете в Windows и не имеете доступа к режиму демона:

WSGIImportScript /some/path/django.wsgi application-group=%{GLOBAL}
WSGIScriptAlias / /some/path/django.wsgi application-group=%{GLOBAL}

Кажется упущением в mod_wsgi, что установка только группы приложений для WSGIScriptAlias, когда режим демона недоступен, все еще приводит к предварительной загрузке.

2 голосов
/ 31 мая 2010

Зачем вам это нужно для запуска в потоке? Если вы хотите отдельный длительный процесс, создайте его из командной строки или демона. Или используйте что-то вроде сельдерей .

...