我相信 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 字段来设置可以发送任务的最早时间,但这似乎更像是一种启发式方法,而不是保证。
问问题
1391 次
1 回答
2
考虑使用管道 API:
https://github.com/GoogleCloudPlatform/appengine-pipelines
他们已经为您完成了工作:
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 的数据管道:
于 2015-05-01T18:22:46.230 回答