芹菜动态工作流程

时间:2014-12-05 12:38:39

标签: python celery

我正在使用Celery版本3.1.17

通常,您可以使用带有chaingroupchord或简称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
.....

0 个答案:

没有答案