【发布时间】:2021-02-21 21:43:45
【问题描述】:
我真的很难弄清楚如何使用 asyncio 从一堆 AWS Lambda 调用中返回一堆结果,这是我的示例。
我的团队拥有一堆 AWS 账户。由于时间关系,我想运行一个 async of AWS lambda 函数来处理每个账户的信息,并返回结果。我试图了解如何创建快速发送一大堆帐户的异步操作,而不是一次发送一个。这是我的示例代码。
def call_lambda(acct):
aws_lambda = boto3.client('lambda', region_name='us-east-2')
aws_payload = json.dumps(acct)
response = aws_lambda.invoke(
FunctionName='MyLambdaName',
Payload=aws_payload,
)
return json.loads(response['Payload'].read())
def main():
scan_time = datetime.datetime.utcnow()
accounts = []
scan_data = []
account_data = account_parser()
for account_info in account_data:
account_info['scan_time'] = scan_time
for account in account_data:
scan_data.append(call_lambda(account))
我正在努力弄清楚如何以 asyncio 风格做到这一点。我最初设法使用并发期货线程池执行器来完成它,但我遇到了一些性能问题,但这就是我所遇到的。
executor = concurrent.futures.ThreadPoolExecutor(max_workers=50)
sg_data = executor.map(call_lambda, account_data)
所以这行得通,但效果不佳,我被告知改为执行 asyncio。我阅读了以下这些文章,但我仍然对如何使这项工作感到迷茫。我知道 AWS Lambda 本身是异步的,没有协程应该也能正常工作。
tl;dr 是我想为列表中的每个字典启动 call_lambda(acct)(account_data 是字典列表),然后将所有结果再次返回到一个大字典列表中。 (这最终会被写入 CSV,为什么不进入数据库的公司政策问题)。
我已经阅读了以下内容,仍然感到困惑......
【问题讨论】:
-
您查看过 aiobotocore 的文档吗?
-
是的,但它似乎工作基本相同,除非我错过了什么
标签: python python-3.x asynchronous python-asyncio python-3.8