芹菜签名集的最大重试次数未更新

lio*_*ayn 5 python signature celery

嘿 :)

所以我在代码中遇到了一个错误,在尝试解决它时 - 我编写了这个小芹菜任务:

@shared_task(bind=True, name='sometask', autoretry_for=(Exception,), default_retry_delay=1)
def sometask(self, items, *args, **kwargs):
    print(self.max_retries)
    raise Exception
Run Code Online (Sandbox Code Playgroud)

我尝试通过在签名上调用 set() 来覆盖重试:

s = sometask.s(items=[]).set(max_retries=200, countdown=1)
s()
Run Code Online (Sandbox Code Playgroud)

当我检查输出时,我可以看到打印的是 3 - celery 中默认的最大重试次数。而不是我的200..

谁能告诉我我做错了什么?

我需要覆盖最大重试次数,这似乎是我唯一的选择,但它并不像我预期的那样工作。

谢谢!

phi*_*ker 2

尽管文档说这retry_policy是传递给 的有效选项apply_async,但它似乎是发布任务的重试策略,而不是任务本身重试。

此外,max_retries任务在运行时似乎并不可变。然而,它可以在装饰器中设置:@shared_task(bind=True, name='sometask', autoretry_for=(Exception,), default_retry_delay=1, max_retries=200)

当我尝试在运行时更改 max_retries 时,我可以解决这个问题,这似乎是不可能的,这个问题是不可忽视的。一种解决方法:

@shared_task(bind=True, max_retries=200)
def sometask(self, items, *args, **kwargs):
    print(self.max_retries)
    raise Exception

# only want to retry normal 3 times here
sometask.apply_async(retries=sometask.max_retries - 3)
Run Code Online (Sandbox Code Playgroud)