调用其他任务时,Celery配置会更新

时间:2016-04-09 11:12:06

标签: celery django-celery celery-task djcelery celeryd

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

作为标准做法,我有:

celery.py:

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

在项目/ init .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时,代理网址是正确的。但是,当我检查任何先前的任务 - &gt; app-&gt; conf-&gt;经纪人网址时,它会使用新的经纪人进行更新。如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我删除了&#39; autodiscover_tasks&#39;和相关的&#39; _app&#39;每个任务&#39;类。这让我解决了这个问题。