Как развить процесс в python / django? - PullRequest
4 голосов
/ 06 февраля 2012

Это больше общий вопрос Python, однако в контексте django.

Пока у меня есть такое представление в django, которое должно обрабатывать много данных.Обычно на это уходит сервер (nginx с запущенным в прокси django) через пару минут.Иногда время ожидания сервера.Я не хочу увеличивать время ожидания в nginx.Я понимаю, что если я смогу разветвить процесс в python в представлении django, чтобы разветвленный (дочерний) процесс выполнял все обработки данных независимо от представления django, то представление сможет немедленно вернуть запрос пользователю (следовательно, никогда не происходит тайм-аут), и дочерний процесс будет продолжать работать в фоновом режиме, завершая все вычисления.

Итак, вот вопрос:

Как я могу создать независимый процесс в pythonи если это возможно, чтобы код Python был в том же файле)?И, если возможно, как я могу назначить ему приоритет процесса unix?

Я рассмотрел некоторые способы разветвления процесса в python, и кажется, что есть несколько вариантов.Какой из них лучше всего подходит для этого сценария?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 06 февраля 2012

«лучший метод» - использовать менеджер очередей, как правило, RabbitMQ или любой бэкэнд, обрабатываемый Django-celery.

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

проверьте Django-utils , чтобы увидеть, достаточно ли этого. если нет, то иди к сельдерею.

2 голосов
/ 06 февраля 2012

Если вы действительно хотите раскошелиться и установить приоритет, вы можете использовать os.fork и os.nice, но я думаю модуль multiprocessing или Сельдерей был бы более применим здесь.

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