【发布时间】:2020-12-06 00:08:50
【问题描述】:
我有以下代码,可从所有 AWS 支持区域的名为 resourcegroupstaggingapi 的 AWS 服务中获取资源信息。现在我正在遍历多个区域并成功获取记录,但我的问题是处理需要很长时间,CPU memory 也被大量使用并且执行时间非常长,我在40 million records 左右过程。有人能告诉我优化此代码的最佳方法是什么吗?我看到生成器提高了性能和执行速度,但我不知道如何append 和@ 987654325@ 多个值。我也是 Python 新手,谁能指导我如何改进以下代码:
import boto3, os, json
from credentials import AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
AWS_SUPPORTED_REGIONS = ["ap-northeast-1", "ap-northeast-2", "ap-south-1", "ap-southeast-1", "ap-southeast-2",
"ca-central-1", "eu-central-1", "eu-north-1", "eu-west-1", "eu-west-2", "eu-west-3",
"sa-east-1", "us-east-1", "us-east-2", "us-west-1", "us-west-2"]
def services_info():
services_info = []
services_info_no_owner = []
for region in AWS_SUPPORTED_REGIONS:
client = boto3.client('resourcegroupstaggingapi', region_name=region,
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY
)
paginator = client.get_paginator('get_resources')
resources = []
for page in paginator.paginate():
resources.extend(page["ResourceTagMappingList"])
for resource in resources:
resource_arn = resource.get("ResourceARN")
arn_split = resource_arn.split(':')
service_name = arn_split[2]
resource_owner_info = arn_split[3]
services_info.append({
"resource_arn": resource_arn,
"service_name": service_name,
"region": region,
"owner_info": resource_owner_info
})
if services_info_no_owner.isspace():
services_info_no_owner.append({
"resource_arn": resource_arn,
"service_name": service_name,
"region": region,
"owner_info": resource_owner_info
})
return services_info, services_info_no_owner
services_info, services_info_no_owner = services_info()
try:
with open("services_info.json", 'w') as output:
json.dump(services_info, output, sort_keys=True, indent=4)
except Exception as e:
print("Exception occurred while writing to file")
try:
with open("services_info_no_owner.json", 'w') as output:
json.dump(services_info_no_owner, output, sort_keys=True, indent=4)
except Exception as e:
print("Exception occurred while writing to file")
【问题讨论】:
标签: python python-3.x python-requests generator boto3