Разделение проекта Django - PullRequest
       3

Разделение проекта Django

1 голос
/ 03 февраля 2012

У меня есть проект django с различными приложениями, которые полностью независимы.Я бы хотел, чтобы они запускали каждый из них в своем собственном процессе, так как некоторые из них порождают фоновые потоки, чтобы периодически пересчитывать некоторые данные, и теперь они конкурируют за ЦП (машина имеет множество ядер, но вы знаете, GIL итакие ...)

Итак, есть ли простой способ автоматически разделить проект на разные или, по крайней мере, заставить каждое приложение жить в своем собственном процессе?

Ответы [ 2 ]

4 голосов
/ 03 февраля 2012

У вас всегда могут быть разные файлы настроек, но это все равно что иметь несколько проектов и даже несколько конечных точек. Приложив некоторые усилия, вы можете настроить обратный прокси-сервер для перенаправления на правильный сервер Django, основываясь на пути запроса и т. Д., Но я не думаю, что это то, что вам нужно, и это будет уродливым решением вашей проблемы.

Решением этой проблемы является перемещение тяжелой обработки в очередь заданий. Многие люди и проекты предпочитают Сельдерей для этого.

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

1 голос
/ 03 февраля 2012

Самым простым из них, вероятно, является написание пользовательской команды управления , которая отслеживает данную модель (таблицу базы данных) для новых записей и обрабатывает их.Модель записывается, например, с помощью представления Django, и команда управления периодически запускается из cron (например, каждые 5 минут).

Пример: пользователь регистрируется на сайте, но создание учетной записи - дорогостоящая операция (выделениепространство, пинг удаленных служб и т. д.).Поэтому вы просто записываете новую запись в таблицу AccountRequest (AccountRequest.objects.create(...)).Затем cron периодически запускает скрипт управления (./manage.py account_creator), который проверяет наличие новых AccountRequest-ов (AccountRequest.objects.filter(unprocessed=True)), выполняет свою работу и отмечает эти запросы как обработанные.

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