Google App Engine:task_retry_limit不起作用?

时间:2011-03-31 19:44:49

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

我有一个Python GAE应用程序。

我希望我的任务停止运行,或者只是在失败时重试一次。现在,尽管我的yaml文件告诉他们,他们仍然会永远奔跑!

这是一个queue.yaml条目:

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

如果globalPurchase任务因500错误代码而失败,则会一直重试,直到日志中显示此消息成功:

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

为什么没有实际使用task_retry_limit?

3 个答案:

答案 0 :(得分:7)

我遇到了同样的问题。这方面的文档和工具缺乏,但这是我发现的:

  • 重试参数在开发服务器中无效。我尝试了很多不同的组合,但它始终只是无限期重试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秒。
  • 第一次重试之前的时间是不可预测的;它似乎被随机延迟了一分钟。之后,重试将遵循配置的计划。

答案 1 :(得分:4)

我遇到了同样的问题,奇怪的是,我离开它几个小时后似乎开始工作正常......也许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

答案 2 :(得分:2)

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