我正在使用Celery
版本3.1.17
。
通常,您可以使用带有chain
,group
,chord
或简称linking tasks
等画布模块的芹菜来准备自己的静态工作流程。您可以访问任何结果或任何任务属性,例如工作流中任何任务的任务ID。您必须预先定义任务。
我正在通过调用工作流中的子任务来执行动态子任务。例如,我将任务称为canvas模块,他们动态地决定逻辑并尝试根据该决定调用子任务。但是在该解决方案中,我的静态工作流任务和动态子任务之间没有父/子关系。我无法追踪它们。这真令人沮丧。这是我目前无法使用的方式;
class ParentTask(Task):
def run(self, *args, **kwargs):
SubTask().subtask(args=(1, 2), countdown=1).apply_async()
class SubTask(Task):
def run(self, x, y, *args, **kwargs):
return x+y
non_tracable_for_subtask_result = ParentTask().delay()
我需要一个画布模块(组,和弦等)可以在我的工作流程中的任务中动态扩展。我可以在运行时将新的子任务动态链接到我当前的工作流程(chord,group, etc.
)吗?
我想要类似的东西;
// THIS CODE DOES NOT WORK, JUST TO EXPLAIN REQUIREMENT
class ParentTask(Task):
def run(self, *args, **kwargs):
count = get_count()
sub_task=SubTask().subtask(args=(1, 2), countdown=1)
for i in range(count):
//It could be like. THIS PART WHAT I LOOK FOR
self.link(sub_task)
class SubTask(Task):
def run(self, x, y, *args, **kwargs):
return x+y
>>> tracable_for_subtask_result = ParentTask().delay()
>>> tracable_for_subtask_result.children.get()
3
>>> tracable_for_subtask_result.children.id
.....