11

我有一个 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 实际上没有被使用?

4

3 回答 3

7

我有同样的问题。缺乏该领域的文档和工具,但这是我发现的:

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

我有同样的问题,奇怪的是它似乎在我离开几个小时后开始正常工作......也许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
于 2011-07-21T06:50:50.073 回答
2

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

于 2011-04-06T21:10:36.257 回答