在服务器中为两个 Django 应用程序运行两个芹菜工人

Ros*_*Ang 2 python django redis celery

我有一个服务器,其中两个 django 应用程序正在运行 appone,apptwo 为它们运行,两个 celery 工作程序使用命令启动:

celery worker -A appone -B --loglevel=INFO


celery worker -A apptwo -B --loglevel=INFO
Run Code Online (Sandbox Code Playgroud)

两者都指向相同的 BROKER_URL = 'redis://localhost:6379'

redis 是用 db 0 和 1 设置的

我可以在两个应用程序的日志中看到这两个应用程序中配置的任务,这会导致警告和错误。

我们可以在 django 设置中进行配置,以便 celery 单独工作而不会干扰彼此的任务吗?

kic*_*hik 7

您可以将任务路由到不同的队列。用两个不同的开始 Celery,-Q myqueueX然后CELERY_DEFAULT_QUEUE在你的两个 Django 项目中使用不同的。

根据您的 Celery 配置,您的 Django 设置应该类似于:

CELERY_DEFAULT_QUEUE = 'myqueue1'
Run Code Online (Sandbox Code Playgroud)

您还可以通过以下方式进行更细粒度的控制:

@celery.task(queue="myqueue3")
def some_task(...):
  pass
Run Code Online (Sandbox Code Playgroud)

更多选项在这里:

如何保持多个独立的芹菜队列?