【问题标题】:Why Google App Engine Tasks can spuriously be executed more than once?为什么 Google App Engine 任务可以虚假执行多次?
【发布时间】:2010-11-11 03:49:25
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    Brant Slatkin 给了一个similar talk at I/0 2010

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-01
      • 2021-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多