2012-02-12 107 views
4

在我的应用程序中,我有一个很长的任务,所以我将它分成n个较小的任务。在这n个任务完成之后,将执行另一个任务并取决于这n个任务的结果。如何通过Task API实现这种依赖关系?即在其他n个任务之后执行一个任务。Google App Engine - 任务依赖关系

+0

发现一个类似于你的问题。 http://stackoverflow.com/questions/4224564/calling-a-script-after-tasks-queue-is-empty – jftsai 2012-02-12 13:52:30

回答

1

我认为有2种方法可以解决这个问题。 假设任务TD依赖于其他N任务TA,并有一个队列Q.到队列Q.

  1. 推ñTA任务时,每个TA完成任务,它会检查,如果本身是最后一个队列Q.如果TA是队列Q中的最后一个任务,则将TD推送到队列Q.

  2. 推送n个TA任务和TD到队列Q.当TD运行时,它检查是否所有TA任务完成。如果有任何未完成的TA,则通过返回范围在200-299之外的任何HTTP状态代码,TD取消其执行。

这些方法的关键是要任务的数量在队列问:虽然我没有试过,我知道有一个Python API提供了实验方法来获取特定队列的任务队列资源。 stats.totalTask​​s属性是队列中的队列总数。

请参阅http://code.google.com/intl/en/appengine/docs/python/taskqueue/rest.html

1

拿上GAE Pipeline API一看,它是用来构建复杂的任务工作流像你描述的。

0

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