用awsretry.backoff()装饰您的aws boto3调用。这将允许您的调用绕过aws最终的一致性错误。

awsretr的Python项目详细描述


awsretry是一个python装饰器,可用于包装boto3函数调用。 这个函数是为了解决一些常见问题而构建的 使用AWS API时。

  • 查询API请求率
  • 最终一致性模型。

遇到时将重试的异常

  • 超出请求限制
  • 不可用
  • 服务不可用
  • 内部故障
  • 内部错误
  • ^ W+。未找到

此列表可以扩展。(http://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html

快速启动

安装锥度。

$ pip install awsretry

我假设你知道如何设置BOTO3凭据,如果不知道,你可以阅读 这里的说明http://boto3.readthedocs.io/en/latest/guide/configuration.html

awsretry.backoff接受的关键字参数

  • 尝试次数=放弃前尝试的次数。默认值为10
  • 延迟=两次重试之间的初始延迟(秒)。默认值=3
  • 退避=退避乘数,例如2的值将使每次重试的延迟加倍。默认值=1.1
  • added_exceptions=要重试的其他异常,超出默认值。默认值=list()

示例

编写一个实现awsretry.backoff()的快速函数

#!/usr/bin/env pythonimportbotocoreimportboto3fromawsretryimportAWSRetry@AWSRetry.backoff()defget_instances():client=boto3.client('ec2')try:instances=client.describe_instances()returninstancesexceptbotocore.exceptions.ClientErrorase:raisee:instances=get_instances()

编写一个将覆盖默认参数的快速函数。

#!/usr/bin/env pythonimportbotocoreimportboto3fromawsretryimportAWSRetry@AWSRetry.backoff(tries=20,delay=2,backoff=1.5,added_exceptions=['ConcurrentTagAccess'])defcreate_tags():client=boto3.client('ec2')try:resources=['1-12345678891234']tags=[{'Key':'service'},{'Value':'web-app'}]instances=client.create_tags(Resources=resources)exceptbotocore.exceptions.ClientErrorase:raisee:create_tags()

开发

假设您安装了python和virtualenv,请设置 环境并安装所需的依赖项,而不是 上面定义的pip install awsretry

$ git clone https://github.com/linuxdynasty/awsretry.git
$ cd awsretry
$ virtualenv venv
...
$ . venv/bin/activate
$ pip install -r requirements.txt
$ pip install -e .

运行测试

您可以使用实现nosetest的tox来运行测试,或者运行它们 直接用鼻子测试。

$ tox
$ tox tests/test_awsretry.py
$ tox -e py27,py36 tests/
$ nosetest

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java SimpleCursorAdapter删除值   java结束while循环条件   java检查设备是否连接到特定网络   java组织。冬眠MappingException找不到逻辑名称为annotation getter的列   为什么java邮件中会抛出此异常?   加载SDK时发生java Eclipse错误   返回奇怪输出的Java数组   JavaXStream和对象类序列化   将枚举列表传递给namedQuery后出现java非法转换异常。Hibernate中的setParameter()   java Android studio不允许我在字符串上使用开关?   有没有办法从Java程序访问存储在Chrome中的cookie   java在枚举中构造实例而不修改枚举类   java Blackberry JDE FieldChangeListener   java修复错误:未报告的异常InterruptedException   java Spring数据JPA:findAll(具有规范和可分页)在计数查询中失败