【发布时间】:2017-06-13 03:11:07
【问题描述】:
在谷歌应用引擎中,当你将任务添加到同一个推送任务队列中时,它们会按时间顺序依次排队吗?或者是否有可能一个任务可以在另一个任务之前执行,尽管它是最后添加的? (这都是假设他们使用相同的队列)。
【问题讨论】:
标签: google-app-engine objectify task-queue
在谷歌应用引擎中,当你将任务添加到同一个推送任务队列中时,它们会按时间顺序依次排队吗?或者是否有可能一个任务可以在另一个任务之前执行,尽管它是最后添加的? (这都是假设他们使用相同的队列)。
【问题讨论】:
标签: google-app-engine objectify task-queue
不一定。我可以想到 2 种可能不会发生的情况:
任务可以有不同的 ETA(例如,将来),顺序通常是 ETA,请参阅do google app engine pull queues return tasks in FIFO order?
任务执行可能会失败(无论出于何种原因),并且可能会使用退避方案自动重试(即在一些延迟之后)。这意味着通常会在失败后运行的其他任务实际上可能在其重试尝试之前运行。
【讨论】:
任务队列不保证执行顺序。特别是,计划立即运行的任务遵循可能导致大量重新排序的代码路径。推送和拉取队列的行为也明显不同。
但是,如果您将任务安排在未来很短的时间后运行,则执行顺序更有可能是 eta 顺序。同样,没有任何保证,您应该将无序交付作为一种正常但不常见的情况进行设计。故障模式通常是在短时间内出现大量无序任务,而不是偶尔孤立的无序任务。
【讨论】: