2012-01-27 62 views
3

有没有办法确定一组Google App Engine任务(及其产生的子任务)何时完成全部有没有办法知道一组应用程序引擎任务队列任务已完成?

假设我有100个任务要执行,其中10个产生了10个子任务。这是200个任务。我们还要说,这些子任务可能会产生更多的任务,递归等...

有没有一种方法来确定何时完成所有任务?我尝试过使用应用程序引擎管道API,但它看起来并不像我的特殊用例那样,即使它是一个很棒的API。

我的使用案例是,我想制作一大堆速率有限的URL获取调用,同时写入一个blob。在所有网址抓取调用结束时,我想完成blob。

我找到了使用管道API的解决方案,但是它向数据存储写了很多内容,以至于我无法经常需要运行管道,从而降低成本。

+0

你已经看过Fantasm了吗?文章中有一个有趣的部分描述了fanning:http://code.google.com/appengine/articles/fantasm.html#in,并且您能预测提前产生的任务数量吗? – proppy 2012-01-27 01:10:47

+0

嗨特普皮,谢谢你。我的例子是粉丝之一,你提到的fantasm文章谈论使用粉丝进行优化计数操作。这可能会派上用场,但我不知道我的特定用例事件的数量,所以我想这意味着我必须做某种递归计数。我希望有人能够让我远离这一点。 – 2012-01-27 04:32:37

+0

您是如何确定管道API不符合成本效益的?数据存储的写入很便宜,特别是在不需要索引的情况下。 – 2012-01-27 04:47:22

回答

1

没有办法写入某种持久性存储介质,而数据存储是镇上唯一的游戏。您可以编写自己的服务器来使用后端跟踪完成情况,但这对于简单的任务来说是一个非常大的开销。使用管道API是你最好的选择。

+0

我很好,写入数据存储区。如果它意味着API将为90-120个作业写入5K大型实体到数据存储区,那么我不会使用管道API执行此操作。我不确定我的代码是否已优化。我甚至不确定是否正确使用管道API。我已经从代码上的项目维护者那里得到了帮助,虽然我不能说所有的用例都是这样执行的,但这是我在我的经历中遇到的。 $ 90为90-120的URL提取和所有的数据存储会计随之而来(5K +大实体正在写入) – 2012-01-27 11:20:19

+0

@JohnWheeler我真的很惊讶于此。实体的性质是什么?我想不出有什么理由需要像那么多实体一样,或者为什么他们会“大”。 – 2012-01-27 22:47:25

+0

这是我运行管道4次的结果。每个管道调用最终完成大约90-120个工作。 http://i.imgur.com/jigBP.png - 让我知道你是否有兴趣看到任何具体的东西。 – 2012-01-27 23:37:26

相关问题