我正在开发一个App Engine应用程序,其中http请求产生未定义数量的任务(可以是10,可以是100,可以是1000)。 这些任务将在PUSH队列中运行。
当所有任务完成后,我需要一个结论性的动作,它将获得每个任务的状态并创建一个最终报告(所有已执行操作的摘要)。对于这个例子,假设它是一个电子邮件传递。
另外一个信息是任务按公共值分组(让我们调用group_id)。当完成相同group_id的所有任务时,可以为该特定组执行该事件。我做的这个规范是因为如果其他任务仍然在运行但是还有其他group_id,那么该组的事件也可以执行。
我想知道哪种方法是实现这样的最佳方法。 当然可以有很多“自制”解决方案,例如,我将每个任务的状态保存在数据存储区实体中并检索每个状态,否则每个任务都可以“质疑”其兄弟并检查它是否是最后一个
我的问题是,是否有更高级别的解决方案来实现此行为。
通过快速搜索,我发现管道API [1]似乎很有希望,但我不确定它是否是我需要的行为的正确解决方案。 在stackoverflow上,这个库非常受欢迎,所以也许是正确的方法。
这里有一些我读过的帖子
How can I tell if a set of app engine tasks have all completed?
Writing to an appengine blob asynchronously and finalizing it when all tasks complete
Is there a way to know when a set of app engine task queue tasks have completed?
如果我正确理解了此Pipeline API的实现,当Job启动时,它会提供一个jobId来测试它是否已完成或仍在运行。 如果是这样,这需要对作业状态进行外部调查,这不是我的情况。我特别需要的是当最后一次完成时,最终的事件会自动触发
[1] https://github.com/GoogleCloudPlatform/appengine-pipelines
答案 0 :(得分:1)
您可以使用单个数据存储区实体来存储group_id,已启动的任务数以及已完成的任务数。完成后,每个任务都会更新此实体,如果完成的任务数等于启动的任务数,则创建“最终”任务以生成报告。