使用TaskQueue和Datastore计算任务完成时间组

时间:2017-07-05 19:42:40

标签: google-app-engine google-cloud-datastore app-engine-ndb

我有一个推送任务队列,我的每个作业都包含多个类似的TaskQueue任务。这些任务中的每一个都需要不到一秒的时间来完成,并且可以向队列添加新任务(它们也应该完成以考虑完成的工作)。任务结果将写入DataStore。

目标是了解作业何时完成,即所有任务都已完成。

写入非常频繁,我无法将结果存储在一个实体组中。对此有一个很好的解决方法吗?

1 个答案:

答案 0 :(得分:0)

在类似的上下文中,我使用了基于memcache的方案,该方案没有显着的写入速率限制作为数据存储区实体组:

  • 每个作业都会获得一个与之关联的唯一memcache密钥,并将其传递给它可以入队的每个后续执行任务
  • 每个执行任务都会使用当前时间戳更新与作业键对应的内存缓存值,并将完成检查任务排入队列,延迟时间为空闲超时值,大小足以在完成后声明作业已完成。
  • 每个完成检查任务都会将与作业键对应的内存缓存值与当前时间戳进行比较:
    • 如果delta小于空闲超时,则表示作业未完成(由于此完成检查任务已入队,因此执行了其他一些任务,因此队列中还有其他完成检查任务)
    • 否则作业已完成

注意:空闲超时应该大于任务可能在队列中花费的最长时间。