0

我有多个任务作为使用 RabbitMQ 代理的不同 django 应用程序。这是使用标准 django 配置设置的,并且运行良好。我正在使用组、链并从不同的模块调用它们。

作为标准做法,我有:

芹菜.py:

app = Celery('<proj>')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

在项目/初始化.py 中:

from __future__ import absolute_import
from .celery import app as celery_app

所有任务都继承自 celery.Task 并覆盖了 run()。

现在我需要在不同的 RabbitMQ 代理上调用不同的任务。

所以这就是我必须调用不同任务的地方:

diff_app = Celery('diff')
diff_app.config_from_object({'BROKER_URL':'<DIFF_BROKER_URL>'})

现在打电话:

diff_app.send_task('<task_name>', (args1,arg2,))

完成此操作后,当我调用以前的任务时,它们会被路由到这个新代理。在我注释掉这段代码的那一刻,一切都恢复正常了。

当我检查 celery_app(如上所述)conf 时,代理 url 是正确的。但是当我检查任何以前的任务->应用程序->conf->代理 url 时,它会更新为新的代理。如何解决这个问题?

4

1 回答 1

0

我删除了“autodiscover_tasks”并将“_app”与每个“任务”类相关联。这让我解决了这个问题。

于 2016-05-02T16:48:18.110 回答