【发布时间】:2014-08-29 22:06:57
【问题描述】:
我在 Celery 中有 3 个任务..
celery_app.send_task('tasks.read_cake_recipes')
celery_app.send_task('tasks.buy_ingredients')
celery_app.send_task('tasks.make_cake')
read_cake_recipes 和 buy_ingredients 都没有任何依赖关系,但是在任务 make_cake 可以运行之前,read_cake_recipes 和 buy_ingredients 都需要完成。
make_cake 可以在前两个启动后的任何时间运行。但是make_cake 不知道其他任务是否已经完成。所以如果read_cake_recipes 或buy_ingredients 花费的时间太长,那么make_cake 就会惨遭失败。
链接任务似乎在这里不起作用,因为make_cake 有多个依赖项。
我怎样才能仍然开始任务make_cake,但让它等待/挂起等,直到其他两个任务首先完成?
我的优点是 read_cake_recipes 和 buy_ingredients 将结果保存到数据库中,如果 make_cake 知道要查找哪些成分或食谱,也许可以检查一下?
【问题讨论】:
-
read_cake_recipes和buy_ingredients是独立任务有什么原因吗?即,它们有时会在没有make_cake的情况下运行吗? -
@CaseyKinsey 是的,这些任务有时在没有 make_cake 的情况下运行。 make_cake 可能永远不会运行。但是如果它确实被调用了,那么它需要将其他两个任务结果放在一起,然后做一个蛋糕。