Google App Engine:task_retry_limit 不起作用?

发布于 2024-10-29 15:09:25 字数 409 浏览 1 评论 0原文

我有一个 Python GAE 应用程序。

我希望我的任务停止运行,或者在失败时重试一次。现在,不管我的 yaml 文件告诉他们什么,他们都会永远运行!

以下是一个queue.yaml条目:

 - name: globalPurchase
   rate: 10/s
   bucket_size: 100
   retry_parameters:
     task_retry_limit: 1

如果globalPurchase任务失败并出现错误代码500,则会永远重试,直到成功并在日志中显示以下消息:

“队列“globalPurchase”上名为“task14”的任务失败,代码为500;将重试30秒后”

为什么task_retry_limit实际上没有被使用?

I have a Python GAE app.

I want my tasks to stop running or just retry once if they fail. Right now, they run forever despite what my yaml file is telling them!

Here is a queue.yaml entry:

 - name: globalPurchase
   rate: 10/s
   bucket_size: 100
   retry_parameters:
     task_retry_limit: 1

If globalPurchase task fails with a 500 error code, it is retried forever until it succeeds with this message in the logs:

"Task named "task14" on queue "globalPurchase" failed with code 500; will retry in 30 seconds"

Why is task_retry_limit not actually being used?

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

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

发布评论

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

评论(3

苍白女子 2024-11-05 15:09:25

我也有同样的问题。缺乏该领域的文档和工具,但我发现以下内容:

  • 重试参数在开发服务器中没有效果。我尝试了很多不同的组合,但总是间隔 30 秒无限期地重试。当我部署到生产服务器时,这些参数确实生效了。
  • 我还没有找到一种方法来禁用所有重试(除了确保我的处理程序不会抛出异常)。
    • 如果task_retry_limit=0,则仍会重试。
    • 如果设置了 task_retry_limit=0task_age_limit,则queue.yaml 会被拒绝,并显示一条消息:task_retry_limit 必须为正值。< /里>
    • 同样,如果task_age_limit=0,它也会发出抱怨。
    • 如果您设置 task_retry_limit=1task_age_limit=1s(显然是最小值),您仍然可以重试一次。
  • 最短重试时间为 20 秒。如果您的配置指定的延迟小于 20,则只会等待 20 秒。
  • 第一次重试之前的时间是不可预测的;它似乎随机延迟最多一分钟。之后,重试将按照配置的计划进行。

I had the same problem. The documentation and tooling in this area is lacking, but here's what I found:

  • The retry parameters have no effect in the development server. I tried lots of different combinations, but it was always just indefinite retries 30s apart. The parameters did take effect when I deployed to the production server.
  • I haven't found a way to disable all retries (other than by ensuring that my handler doesn't throw exceptions).
    • If task_retry_limit=0, then it still retries.
    • If task_retry_limit=0 and task_age_limit is set, then the queue.yaml is rejected with a message that task_retry_limit must be positive.
    • Similarly, it complains if task_age_limit=0.
    • If you set task_retry_limit=1 and task_age_limit=1s (apparently the minimum values), you still get one retry.
  • The minimum retry time is 20 seconds. If the delay specified by your configuration is les than 20, than it will just wait 20 seconds.
  • The time before the first retry is unpredictable; it seems to be randomly delayed by up to a minute. After that, the retries follow the configured schedule.
难理解 2024-11-05 15:09:25

我也遇到了同样的问题,奇怪的是,在我将其原样放置几个小时后,它似乎开始正常工作...也许 GAE 需要一些时间来刷新?

无论如何,对我有用的设置是:

# configure the default queue
- name: default
  rate: 1/s
  retry_parameters:
    # task will stop retrying ONLY when BOTH LIMITS ARE REACHED
    task_retry_limit: 1
    task_age_limit: 1s

I had the same problem, strangely it seems to start working fine after I left it as is for few hours... Perhaps there is some time needed for GAE to refresh??

Anyway, the settings worked for me are:

# configure the default queue
- name: default
  rate: 1/s
  retry_parameters:
    # task will stop retrying ONLY when BOTH LIMITS ARE REACHED
    task_retry_limit: 1
    task_age_limit: 1s
染柒℉ 2024-11-05 15:09:25

如果您根本不希望重试,则应将 task_retry_limit 设置为零,并且需要将其与 task_age_limit 结合使用。 appengine 任务队列重试逻辑使用 task_try_limittask_age_limit 的组合来确定何时停止重试。

You should set task_retry_limit to be zero if you don't want it retried at all, and you need to use this in combination with task_age_limit. The appengine task queue retry logic uses a combination of task_try_limit and task_age_limit to determine when to stop retrying.

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