使用一个芹菜服务器和3k + django站点,每个站点都有自己的数据库,让可重用的任务工作

时间:2011-11-04 00:05:35

标签: python django celery

问题在于:我有一个芹菜服务器和3k + django站点,每个站点都有自己的数据库。可以动态添加新站点(和数据库)。

我正在通过常见的芹菜服务器编写需要为每个站点运行的芹菜任务。代码位于一个应用程序中,该应用程序可以重复使用,因此不应该以与特定设置相关联的方式编写代码。

因此。如果没有修改任务代码以适应我的确切设置,我怎样才能确保任务在运行时连接到正确的数据库?

1 个答案:

答案 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