在我的应用程序中,我有一个很长的任务,所以我将它分成n个较小的任务。完成这n个任务后,将执行另一个任务,它取决于这n个任务的结果。如何使用Task API实现此依赖性?即在其他n个任务之后执行一个任务。
答案 0 :(得分:1)
我认为有两种方法可以解决这个问题。 假设任务TD依赖于其他任务TA,并且存在队列Q。
将n个TA任务推入队列Q.当每个任务TA完成时,它会检查自身是否是队列Q中的最后一个。如果TA是队列Q中的最后一个任务,它会将TD推送到队列Q值。
将n个TA任务和TD推送到队列Q.当TD运行时,它会检查所有TA任务是否完成。如果有任何TA未完成,TD将通过返回200-299范围之外的任何HTTP状态代码来取消其执行。
这些方法的关键是获取队列中的任务数量Q.虽然我没有尝试,但我知道有一个Python API提供了一个实验方法来获取特定队列的TaskQueue资源。 stats.totalTasks属性是队列中的队列总数。
请参阅http://code.google.com/intl/en/appengine/docs/python/taskqueue/rest.html
答案 1 :(得分:1)
查看GAE Pipeline API,它用于构建与您描述的工作流程类似的复杂任务工作流程。
答案 2 :(得分:0)
另一种方法可以是将所有任务添加到队列中。 N个初始任务在完成后将信息记录到数据存储区,以某种方式允许您查询数据存储区以查看它们是否全部运行。
当从属任务运行时,它会执行此数据存储区查询以查看是否满足其条件(检查所有初始任务是否已记录它们已完成)。如果没有,则需要稍后运行
为此,依赖任务可以将自身的副本添加到队列中,计划在某个给定的时间间隔后运行。或者(如上面的答案中所述),依赖任务可以使用错误状态代码终止,在这种情况下,只要未超过队列或任务的retry_limit,它将在稍后的某个时间点自动重试。