Google App Engine:task_retry_limit不起作用?

Bar*_*ara 10 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

Tra*_*vis 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秒.
  • 第一次重试之前的时间是不可预测的; 它似乎被随机延迟了一分钟.之后,重试将遵循配置的计划.


小智 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
Run Code Online (Sandbox Code Playgroud)


小智 2

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