Получение многоразовых заданий для работы в установке с одним сервером сельдерея и 3k + сайтами django, каждый со своей собственной базой данных - PullRequest
0 голосов
/ 04 ноября 2011

Вот проблема: у меня есть один сервер сельдерея и 3k + django сайты, каждый со своей базой данных.Новые сайты (и базы данных) можно добавлять динамически.

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

Итак.Без искажения кода задачи в соответствии с моими настройками, как я могу убедиться, что задачи подключаются к правильной базе данных при запуске?

1 Ответ

0 голосов
/ 04 ноября 2011

Этого трудно достичь из-за врожденного ограничения в Django: настройки являются глобальными. Поэтому, если все приложения не имеют одинаковые настройки, это будет проблемой.

Вы можете попробовать создавать новые рабочие процессы для каждой задачи и каждый раз создавать среду django. Не используйте django-сельдерей, но используйте сельдерей напрямую с чем-то вроде этого в celeryconfig.py:

from celery import signals
from importlib import import_module

def before_task(task, **kwargs):
    settings_module = task.request.kwargs.pop("settings_module", None)
    if settings_module:
        settings = import_module(settings_module)
        from django.conf import setup_environ
        setup_environ(settings)
signals.task_prerun.connect(before_task)

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