使用动态参数重试Python
在和python库中尝试了这一点,但没有效果 重试通常与装饰器一起使用,例如,如下面的元代码所示:使用动态参数重试Python,python,retrying,tenacity,Python,Retrying,Tenacity,在和python库中尝试了这一点,但没有效果 重试通常与装饰器一起使用,例如,如下面的元代码所示: class FooBar: @retry(attempts=3) def dosomething(): ... 我想在类上配置重试参数 class FooBar: def __init__(retries=0): self.retries = retries @retry(attempts=self.retries) def dosom
class FooBar:
@retry(attempts=3)
def dosomething():
...
我想在类上配置重试参数
class FooBar:
def __init__(retries=0):
self.retries = retries
@retry(attempts=self.retries)
def dosomething():
...
显然,这将中断,因为装饰器无法访问对象属性(即无法访问self
)。所以我想这是可行的:
def dosomething():
with retry(attempts=self.retries):
...
但这两个库都不允许在带有块的中调用retry
> with retry():
E AttributeError: __enter__
用动态参数包装重试逻辑的首选方法是什么?您不需要将除臭剂与@
语法一起使用-它们也可以用作函数
from tenacity import retry, stop_after_attempt
class CustomClass:
def __init__(self, retries):
decorator = retry(stop=stop_after_attempt(retries), reraise=True)
self.method_with_retry = decorator(self.method)
def method(self, x):
print('Trying...')
if x % 2:
raise ValueError
return x
CustomClass(3).method_with_retry(11)
请问。。。什么是坚韧?这是它唯一的问题,所以我想你已经创建了它。我没有创建韧性-它是python中重试
库的一个分支,显然自2016年以来就不再开发,并且有bug。我在相关的线程中看到了韧性
和退避
列为备选方案。我刚刚创建了标签,因为它至少在几个不同的线程中被提到过。