使用一个celery服务器和3k+Django站点(每个站点都有自己的数据库)让可重用任务工作

2024-04-25 09:17:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我写的芹菜任务,需要运行每个网站,通过共同的芹菜服务器。代码在一个可以重用的应用程序中,所以它的编写方式不应该把它与这个特定的设置联系起来。在

所以。在不损坏任务代码以适应我的确切设置的情况下,如何确保任务在运行时连接到正确的数据库?在


Tags: django代码服务器数据库应用程序站点网站方式
1条回答
网友
1楼 · 发布于 2024-04-25 09:17:20

这很难实现,因为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

相关问题 更多 >