谷歌应用引擎:任务重试限制不起作用?

2024-10-01 13:29:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python GAE应用程序。在

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

这是一个队列.yaml条目:

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

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

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

为什么实际上没有使用task\u retry_limit?在


Tags: 文件name应用程序yamltasksizebucketrate
3条回答

我也有同样的问题。在这方面缺少文档和工具,但我发现:

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

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

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

相关问题 更多 >