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..
谁能告诉我我做错了什么?
我需要覆盖最大重试次数,这似乎是我唯一的选择,但它并不像我预期的那样工作。
谢谢!
尽管文档说这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)
| 归档时间: |
|
| 查看次数: |
2317 次 |
| 最近记录: |