【问题标题】:About 60 seconds GAE limit?大约60秒AGE限制?
【发布时间】:2011-12-27 17:57:19
【问题描述】:

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

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

【问题讨论】:

  • 你为什么不想使用 cron?看起来很合身?
  • 您能重新表述一下您的问题吗?你不能把你的代码放在后端服务中(没有 60 秒的限制)吗?

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


【解决方案1】:

你可以:

  1. 使用任务发送固定数量的电子邮件(比如 100 封)。然后排队另一个任务继续第一个离开的地方。 (任务限时 10 分钟)。

  2. 使用 MapReduce。

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

  4. 您也可以检查截止日期异常,但我不喜欢这种方法。

This blog post 更多地讨论了截止日期例外。

【讨论】:

    【解决方案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")
    

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

    【讨论】:

      猜你喜欢
      • 2013-11-11
      • 1970-01-01
      • 2020-03-13
      • 2016-12-16
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多