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