问题在于:我有一个芹菜服务器和3k + django站点,每个站点都有自己的数据库。可以动态添加新站点(和数据库)。
我正在通过常见的芹菜服务器编写需要为每个站点运行的芹菜任务。代码位于一个应用程序中,该应用程序可以重复使用,因此不应该以与特定设置相关联的方式编写代码。
因此。如果没有修改任务代码以适应我的确切设置,我怎样才能确保任务在运行时连接到正确的数据库?
答案 0 :(得分:0)
由于Django的固有限制,这很难实现:设置是全局的。因此,除非所有应用程序共享相同的设置,否则这将是一个问题。
您可以尝试为每个任务生成新的工作进程,并且每次都创建django环境。不要使用django-celery,而是直接使用芹菜
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