2

我相信 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 字段来设置可以发送任务的最早时间,但这似乎更像是一种启发式方法,而不是保证。

4

1 回答 1

2

考虑使用管道 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 还为您提供报告/反馈/通知/等。

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


视频参考:

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

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

于 2015-05-01T18:22:46.230 回答