我使用的是芹菜3.0.20,我很难让芹菜任务与不同的队列一起工作。在
我的celery workers是使用队列配置启动的
-Q:w1 default -Q:w2 longrunning
Django设置包含以下芹菜配置:
^{pr2}$到目前为止,还不错。默认情况下,所有任务进入default
队列,task_a
进入长时间运行的队列。在
task_a
模块的实现如下:
from celery import task
@task
def run():
# do some task work
现在,我有一个问题,即另一个任务是作为继承自celery.Task
的类实现的:
from celery import Task
class AnotherTask(Task):
def run(self, *args, **kwargs):
# do some task work
当AnotherTask
类现在驻留在task_b
模块中时,我无法使此任务在longrunning
队列中执行:我尝试以不同的变体将其添加到CELERY_ROUTES
中,但没有一个起作用:
{'mytasks.task_b': {
'queue': 'longrunning',
'routing_key': 'longrunning'
}}
-
{'mytasks.task_b.AnotherTask': {
'queue': 'longrunning',
'routing_key': 'longrunning'
}}
-
{'mytasks.task_b.AnotherTask.run': {
'queue': 'longrunning',
'routing_key': 'longrunning'
}}
我还试图切换到默认的交换类型'topic'
,但这也没用。在
有什么提示可以让类AnotherTask
中的任务在longrunning
队列中执行吗?在
好的,我找到问题了。在
这是因为所有其他任务,最终都在
longrunning
队列中,在这个队列中,通常从celerybeat开始。新任务是从web环境启动的。而celerybeat设置导入了包含CELERY_ROUTES
dict的设置,而web环境设置则没有。啊!在相关问题 更多 >
编程相关推荐