celery任务路由与celery_路由不适用于task子类

2024-06-11 19:17:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是芹菜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队列中执行吗?在


Tags: 模块keyrunfromdefaulttask队列queue
1条回答
网友
1楼 · 发布于 2024-06-11 19:17:43

好的,我找到问题了。在

这是因为所有其他任务,最终都在longrunning队列中,在这个队列中,通常从celerybeat开始。新任务是从web环境启动的。而celerybeat设置导入了包含CELERY_ROUTESdict的设置,而web环境设置则没有。啊!在

相关问题 更多 >