限制异常:AWS api

2024-09-29 00:15:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过awscli探索新的aws服务工作区,它似乎能够满足每秒1个请求。当我试图同时命中多个时,它抛出ThrottlingException。由于工作区还不在boto包中,所以我在python中通过子进程调用使用cli。在

def describe_workspaces():
    process=subprocess.Popen(access_endpoint.split(), stdout=subprocess.PIPE)
    output=process.communicate()[0]

因此,如果我调用这个函数>;=1/sec,就会出现ThrottlingException。怎么处理?会有多个用户同时调用这个函数。 我在考虑进行批处理和异步调用,但如何适应这种架构?在


Tags: 函数awscliaccess进程defprocessendpoint
1条回答
网友
1楼 · 发布于 2024-09-29 00:15:19

您可以使用Boto3(Python中的AWS SDK)解决此问题,方法是为ThrottlingException添加异常处理并重试,如以下代码片段所示:

import boto3
from botocore.exceptions import ClientError

def describe_workspaces(tries=1):
    try:
        return boto3.client('workspaces').describe_workspaces()
    except ClientError as exception_obj:
        if exception_obj.response['Error']['Code'] == 'ThrottlingException':
            if tries <= 3:
                print("Throttling Exception Occured.")
                print("Retrying.....")
                print("Attempt No.: " + str(tries))
                time.sleep(3)
                return describe_workspaces(tries + 1)
            else:
                print("Attempted 3 Times But No Success.")
                print("Raising Exception.....")
                raise
        else:
            raise

您可以在函数外部创建awsapi客户机,并可以根据需要修改逻辑。在

您也可以通过awscli来处理ThrottlingException,但如果您编写一些Bash/Shell脚本而不是Python脚本,则更有意义。对于Python,建议使用Boto3。在

有关详细信息,请查看:AWS Workspaces APIs

相关问题 更多 >