如何使用 Google App Engine 任务队列按 (FIFO) 顺序执行任务?

How to execute tasks in (FIFO) order using Google App Engine Task Queues?

我相信 Google App Engine 中的任务队列(推送、拉取、延迟)不保证任务将按 FIFO 顺序执行。例如,假设我有一个包含任务 A、B 和 C 的任务队列,并且每个任务都有时间戳 t_A、t_B 和 t_C,这样 t_A < t_B < t_C。如何保证任务A、B、C按时间戳顺序执行?如果任务B失败了,我想延迟任务C的执行,直到任务B执行成功。我见过一个 ETA 字段来设置可以发送任务的最早时间,但这似乎更像是一种启发式方法,而不是保证。

考虑使用管道 API:

https://github.com/GoogleCloudPlatform/appengine-pipelines

他们已经为您完成了工作:

https://github.com/GoogleCloudPlatform/appengine-pipelines/wiki/Python#user-content-execution-ordering

class LogWaitLogInOrder(pipeline.Pipeline):

  def run(self, message1, message2, delay):
    with pipeline.InOrder():
      yield LogMessage(message1)
      yield Delay(seconds=delay)
      yield LogMessage(message2)

    yield LogMessage('This would happen immediately on run')

管道 api 也给你 reporting/feedback/notification/etc。

但是如果这对您的特定需求来说太过分了,那么就按照@Paul 的建议去做,在第一个任务完成时创建下一个任务并希望最好的结果


视频参考:

Google I/O 2010 - Google App Engine 的数据管道:

https://www.youtube.com/watch?v=zSDC_TU7rtc