子任务是否继承其父任务的队列?

时间:2015-12-06 22:11:24

标签: python celery

当使用Celery创建子任务(即和弦,链,组),并且您有多个队列(即高优先级,低优先级)时,子任务是否继承创建它的任务的路由参数?

2 个答案:

答案 0 :(得分:2)

回答我自己的问题,实际上已经阅读了源代码......

简短回答

没有

答案很长

使用mytask.s()mytask.si()实例化的任务调用celery.app.Task.subtask()(在主服务器中称为signature()),它不会设置任何路由信息。将其与调用subtask_from_request()的{​​{3}}进行比较,Task.subtask()将队列设置为retry()

我的解决方案

子类将队列添加到class Task(CeleryTask): """ Override the Celery Task baseclass to send subtasks to the same queue as the main task. """ def subtask(self, args=None, kwargs=None, options=None, *starargs, **starkwargs): kwargs = kwargs or {} options = options or {} # override the queue if not passed in as an option if set(('queue', 'exchange', 'routing_key')) & set(options.keys()): options.update(self.request.delivery_info) return super().subtask(args, kwargs, options, *starargs, **starkwargs) 的任务。

base=Task

@task传递给@shared_task / composer.json

答案 1 :(得分:0)

总之:不。 该任务将使用记录here

的路由