Если вы просто хотите использовать библиотеку как есть, тогда вы не сможете использовать декоратор, как этот.Его аргументы являются постоянными с момента его вызова (за исключением возни с изменяемыми аргументами).Вместо этого вы всегда можете вызвать декоратор перед каждым вызовом функции.Это позволяет вам изменять аргументы повторения, как и когда вам нужно.
например.
def post(url, json):
...
rety(post, wait_exponential_multiplier=...)(url=..., json=...)
Но в этот момент вы можете просто пропустить декоратор и использоватьдекоратор использует.
from retrying import Retrying
def post(url, json):
...
Retrying(wait_exponential_multiplier=...).call(post, url=..., json=...)
Любой из этих способов позволяет сохранить функцию post
чистой и абстрагированной от концепции повторных попыток (что упрощает вызов post
, когда вы этого не делаетехотите повторить попытку).
Вы также можете написать вспомогательную функцию, которая упаковывает значения по умолчанию для вашей программы.например,
def retrier(wait_exponential_multiplier=2, **kwargs):
return Retrying(wait_exponential_multiplier=wait_exponential_multiplier, **kwargs)
retrier(wait_exponential_max=10).call(post, url=..., json=...)
retrier(wait_exponential_multiplier=3, wait_exponential_max=10).call(post, url=..., json=...)