- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Celery 版本号:4.4.5
我有一个像这样装饰的函数:
@app.task(bind=True, retry_backoff=5, retry_jitter=False, retry_kwargs={"max_retries": 5})
def foo(self):
try:
#work
except Exception:
try:
_log.info(retrying task)
self.retry()
except MaxRetriesExceeded:
_log.error(Permanent failure)
我预计会在 5 秒后重试,然后在 10 秒后重试,然后在 20 秒后重试,然后在 40 秒后重试,然后在 80 秒后重试。
相反,celery 会记录“180 秒后重试任务”,它确实这样做了。然后,它会重复相同的过程两次,总共重试三次,然后放弃。
从我在文档中读到的内容来看,这似乎是正确的方法。我做错了什么吗?
最佳答案
retry_backoff
选项仅与 autoretries 相关您使用 autoretry_for
任务装饰器参数指定:
A boolean, or a number. If this option is set to
True
, autoretries will be delayed following the rules of exponential backoff.
就您而言,您自己调用 self.retry()
,因此重试退避不适用。
编辑:要处理失败后的清理操作,请考虑以下示例:
from celery import Celery
from celery.utils.log import get_task_logger
app = Celery(broker='pyamqp://')
logger = get_task_logger(__name__)
def cleanup(self, exc, task_id, args, kwargs, einfo):
logger.error('An error has occured, cleaning up...')
@app.task(autoretry_for=(ZeroDivisionError,), retry_kwargs={'max_retries': 3},
retry_backoff=True, on_failure=cleanup)
def fail():
return 1/0
当您调用 fail
任务时,它将失败 3 次,然后引发 ZeroDivisionError
异常。此外,它还会调用cleanup
函数来进行清理。因此,您并不关心任务是否重试,而是对任务失败的事实使用react,并在 on_failure
回调中相应地处理该事实。如果您的操作应取决于发生的异常,则可以使用调用 cleanup
时使用的参数。
关于python - Celery 忽略 retry_backoff,而是重复重试 180 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62545175/
Celery 版本号:4.4.5 我有一个像这样装饰的函数: @app.task(bind=True, retry_backoff=5, retry_jitter=False, retry_kwarg
所以根据docs , default_retry_delay 指定重试任务之前的时间(以秒为单位)。我只是想确保这只会影响手动调用的 self.retry() 调用,而不会影响在任务遇到预定义异常时由
我是一名优秀的程序员,十分优秀!