3

为什么 Google App Engine 任务可以多次执行?根据来自 Google I/O 2009 的 Brett Slatkin 的谈话,即使没有服务器故障,任务也有可能虚假运行两次!

这与线程的虚假唤醒有关吗?

4

1 回答 1

2

Brant Slatkin在 I/0 2010 上发表了类似的演讲

我不知道他曾经详细说明过这种情况如何发生或何时发生。他的观点是,由于任务队列的工作方式,可以通过设计将任务重新排队。因此,您需要编写任务,以便在发生这种情况时不会引起问题。

例如,假设您有一个任务,它发送一封电子邮件,然后在 Datastore 中增加一个计数器。如果您的代码中存在错误或 Datastore 已关闭,则电子邮件可能会成功发送,但写入 Datastore 会失败。如果您没有通过处理异常来处理代码中来自 Datastore 的故障,则无法写入 Datastore 将导致您的任务返回 HTTP 状态代码 500。任务队列旨在在返回状态代码时重新排队任务>299。这将导致您的任务一遍又一遍地执行,直到写入数据存储成功。这意味着有人会收到许多重复的电子邮件。

我认为关于“任务可能虚假运行两次..”这句话只是说 App Engine 不能保证防止这种情况的一种方式,因此您需要确保在代码中处理它。

于 2010-11-11T13:19:21.323 回答