为什么Google App Engine任务会被伪造多次执行?

时间:2010-11-11 03:49:26

标签: multithreading google-app-engine task task-queue

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

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

1 个答案:

答案 0 :(得分:2)

Brant Slatkin给了similar talk at I/0 2010

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

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

我认为关于“任务可能虚假运行两次......”的说法只是说App Engine无法保证不会出现这种情况,因此您需要确保在代码中处理它