如何设置celery链中第一个任务的任务ID?

2 投票
2 回答
3435 浏览
提问于 2025-04-18 09:06

我有这样的代码

from uuid import uuid4
task_id = uuid4()
(task1.s(args..) | task2.s() | task3.s()).apply_async(task_id=task_id)

现在我想把这个自定义的任务ID设置为第一个任务 task1 的任务ID,但当我尝试从 task1 中用 self.request.id 打印出来时,它却是不同的。

我该如何在这里设置一个自定义的ID呢?

2 个回答

3

就是:

from uuid import uuid4
task_id = uuid4()
(task1.s(args..).set(task_id=task_id) | task2.s() | task3.s()).apply_async()
8

如果你想把任务ID传递给你链中的第一个任务,你应该使用.subtask()这个方法。这个方法提供的选项比.s().si()要多。

from celery.utils import uuid
first_task_id = uuid()

(task1.subtask(args=(..), task_id=first_task_id) | task2.s() | task3.s()).apply_async()

撰写回答