谷歌应用引擎-任务依赖性



在我的应用程序中,我有一个长任务,所以我将其拆分为n个较小的任务。在这n个任务完成后,将执行另一个任务,这取决于这n个工作的结果。如何使用Task API实现这种依赖关系?即在其它n个任务之后执行一个任务。

我认为有两种方法可以解决这个问题。假设任务TD依赖于n个其他任务TA,并且存在队列Q。

  1. 将n个TA任务推入队列Q。当每个任务TA完成时,它检查自己是否是队列Q中的最后一个任务

  2. 将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

看看GAE Pipeline API,它用于构建复杂的任务工作流,如您所描述的那样。

另一种方法可以从将所有任务添加到队列开始。让N个初始任务在完成后将信息记录到数据存储中,以某种方式允许您查询数据存储,查看它们是否都已运行
当依赖任务运行时,它执行此数据存储查询以查看其条件是否满足(检查所有初始任务是否已记录它们已完成)。如果没有,则需要稍后运行
为了实现这一点,依赖任务可以将其自身的副本添加到队列中,计划在给定的时间间隔后运行。或者(如上面的答案所示),依赖任务可能会以错误状态代码终止,在这种情况下,只要不超过队列或任务的retry_limit,就会在稍后自动重试。

最新更新