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

gd-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:raiseeinstances=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,Tags=tags)exceptbotocore.exceptions.ClientErrorase:raiseecreate_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第三方库


热门话题
用户界面如何在JavaGUI中为按钮创建各种颜色?   使用MSCAPI的RSA密钥包装的java使用   java Spring数据Redis JedisConnectionException:意外的流结束   java饼图未显示预期输出   java hystrixCommand注释commandKey的用途是什么   windows java可以从cmd运行jar,但不能通过双击来运行   java在单击按钮时遍历XML节点   java试图使用日期(int,int,int)构造函数   带有Buildship 2子项目的java不作为项目依赖项链接   java jsonrpc4j:如何从服务器获取列表<SomeObject>?   用于Java应用程序的内存设置MaxDirectMemory和MaxHeapMemory   java如何从以下类型格式化日期   javayoutube。搜索列表搜索不返回任何内容   java My参数在方法中不起作用,因为泛型存在问题   java如何将Map<Key1Type,Val1Type>转换为Map<Key1Type,Val2Type>   JavaJUnit测试:测试用例的改进,测试数组列表的长度?   java如何在Android中解析带有属性值的xml数据?   使用Hibernate对枚举类型进行Java8bean验证