2024-04-25 09:17:20 发布
网友
问题是:我有一个celery服务器和3k+django站点,每个站点都有自己的数据库。可以动态添加新站点(和数据库)。在
我写的芹菜任务,需要运行每个网站,通过共同的芹菜服务器。代码在一个可以重用的应用程序中,所以它的编写方式不应该把它与这个特定的设置联系起来。在
所以。在不损坏任务代码以适应我的确切设置的情况下,如何确保任务在运行时连接到正确的数据库?在
这很难实现,因为Django有一个固有的限制:设置是全局的。所以除非所有的应用共享相同的设置,否则这将是个问题。在
您可以尝试为每个任务生成新的工作进程,并每次创建django环境。不要用django芹菜,但直接用芹菜和类似的东西 celeryconfig.py:
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
这很难实现,因为Django有一个固有的限制:设置是全局的。所以除非所有的应用共享相同的设置,否则这将是个问题。在
您可以尝试为每个任务生成新的工作进程,并每次创建django环境。不要用django芹菜,但直接用芹菜和类似的东西
celeryconfig.py
:相关问题 更多 >
编程相关推荐