[英]Using Tenacity With an AWS (boto3) Call
使用boto3调用AWS时遇到间歇性RateLimitExceeded错误。 在下面的示例中,由于速率限制,调用instance.all()或i.vpc.tags可能会失败:
for i in instance.all():
tags = i.vpc.tags
通常,我在自己的函数上使用韧度作为装饰器,但是显然此调用无法完成,因为它来自导入的库。 如果不在for循环中,则可以使用重试功能,如下所示:
r = tenacity.Retrying(
reraise=True,
wait=tenacity.wait_random_exponential(multiplier=1, max=60),
stop=tenacity.stop_after_delay(130))
r.call(call_wrapped_in_tenacity())
因此,有没有办法在保持重试能力的同时将这两个调用包装为AWS而不为每个调用建立新功能?
如果创建自己的函数超出范围,那么这是我发现解决此问题的唯一方法。 基本上,当您创建boto3客户端时,您可以向其传递对boto配置中您自己的设置的引用,如下所示:
from botocore.config import Config
config = Config(retries=dict(max_attempts=20))
ec2_client = boto3.client('ec2', config=config)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.