大约 60 秒 GAE 限制?

发布于 2024-12-15 13:59:39 字数 187 浏览 0 评论 0原文

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

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

i want to send an email to 10,000 users but the problem is the process in the server could only last for 60 seconds.
could you please give an example code that count 100 million but it should be done by part. i need to determine how many seconds had past when it reach 59 seconds it should stop and continue to another call so that the 60 seconds limit of the GAE will not occur.
i dont want to use the cron jobs but task queue will do.

thanks for help..
i really appreciate it..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

定格我的天空 2024-12-22 13:59:39

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

# 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")

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

One way to do this is to capture deadline error and queue new task

# 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")

In real app you want to pass the cursor to email list query to the next task

泪之魂 2024-12-22 13:59:39

您可以:

  1. 使用任务发送固定数量的电子邮件(假设为 100 封)。然后将另一个任务排队以从第一个任务剩下的位置继续。 (任务仅限 10 分钟)。

  2. 使用MapReduce。

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

  4. 您还可以检查截止日期例外情况,但我不喜欢

此博客帖子 详细讨论了截止日期例外情况。

You can:

  1. Use Tasks to send a fixed number of emails (let's say 100). Then queue another task to continue where the first one left of. (Tasks are limited to 10 minutes).

  2. Use MapReduce.

  3. Use backends to send all the emails (no deadline limits)

  4. You can also check for Deadline exceptions, but I'm not a fan of that method.

This blog post talks a little bit more about deadline exceptions.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文