大约60秒GAE限制?

时间:2011-11-12 18:49:17

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

我想向10,000位用户发送电子邮件,但问题是服务器中的进程只能持续60秒。 你能不能给一个数亿的示例代码,但应该部分完成。我需要确定它已经过了多少秒才达到59秒它应该停止并继续另一个呼叫,以便不会发生GAE的60秒限制。 我不想使用cron作业但任务队列会这样做。

感谢您的帮助.. 我真的很感激..

2 个答案:

答案 0 :(得分:2)

执行此操作的一种方法是捕获截止日期错误并排队新任务

# get current count from task payload
try:
    # do something
    while True:
      # send email here
      count++;

except DeadlineExceededError:
     # roughly 1 second of before app engine kills this request
     # Queue new task with updated count
     taskqueue.add(queue_name='emailqueue',  ..., payload = count )

     # respond with ok so task won't be retried
     self.response.clear()
     self.response.set_status(200)
     self.response.out.write("OK")

在真实应用中,您希望将光标传递给电子邮件列表查询到下一个任务

答案 1 :(得分:0)

你可以:

  1. 使用“任务”发送固定数量的电子邮件(假设为100)。然后排队另一个任务继续第一个离开的地方。 (任务限制为10分钟)。

  2. 使用MapReduce。

  3. 使用后端发送所有电子邮件(没有截止日期限制)

  4. 您还可以检查截止日期异常,但我不是该方法的粉丝。

  5. This blog post更多地谈论截止日期例外。