我是Python Celery的新手,并尝试使用Celery进行工作流程执行。工作流程:Task workflow
在附图中,我试图显示工作流程,下面将以文字说明。
当客户端调用Task-1时,它会传递一个参数,该参数需要传递给成功和失败场景中的下一个任务。
我知道Canvas可以用来设计Celery的工作流程。但是,我无法弄清楚如何使用不同的成功和失败层次来完成这么大的工作流程。请建议我如何使用Celery和Canvas来规划这样的工作流程。 教程或示例的任何链接都将是一个很好的帮助。
答案 0 :(得分:3)
Have you tried something like this? (pseudo code)
workflow = (t1.s().set(link_error=t4.s()) |
group((t2.s().set(link_error=t7.s()) |
group(t6.s(),
(t5.s().set(link_error=t9.s()) |
group(t8.s(i) for i in xrange(100)))),
t3.s())
)
).apply_async()
link_error is the callback for errors.
http://docs.celeryproject.org/en/latest/userguide/canvas.html
答案 1 :(得分:0)
您可以使用包装器任务来处理调用其他任务的逻辑。
您的代码可能最终会出现类似内容。
@celery.task(name='tasks.wrapper_task')
def wrapper_task(one_arg):
if task_one(one_arg):
task_three.apply_async(arg_one)
if task_two(arg_one):
task_six.apply_async(arg_one)
if task_five(arg_one):
task_eight.apply_async(1)
task_eight.apply_async(2)
# etc...
else:
task_nine(arg_one)
else:
task_seven(arg_one)
else:
task_four(arg_one)
我没有为您定义所有任务。正如您所看到的,除非您需要在其他情况下异步调用它们,否则并非所有都需要芹菜任务。
我已经'失败'意味着返回假,但您可以轻松调整代码以使用try
/ except
。