Я использую Cloudian Storage в помещении с S3 API. Мне нужно отслеживать используемый размер корзины без Cloudian Admin Access.
С AWS CLI, который я использую:
./aws --endpoint-url=https://s3-edc.emea.svc.corpintra.net:443 s3api list-objects --bucket edcs3mposdocifyb --output json --query "{\"size\": sum(Contents[].Size), \"objects\": length(Contents[])}"
Это занимает около 3 минут со следующим результатом:
{
"size": 216317367311,
"objects": 756771
}
Я пытался получить ту же информацию с помощью следующего скрипта python3, используя boto3.
import boto3
total_bucket_size = 0
total_bucket_objects = 0
s3 = boto3.resource('s3', aws_access_key_id="****", aws_secret_access_key="***", endpoint_url="https://my.cloudian.fqdn:443", verify="MyChain.cer")
bucket = s3.Bucket("mybucketname")
bucket_name = bucket.name
for obj in bucket.objects.all():
obj_key = obj.key
bucket_object = s3.Object(bucket_name, obj_key)
obj_size = int(bucket_object.content_length)
total_bucket_size += obj_size
total_bucket_objects += 1
print("%010d %s -> %d" %(total_bucket_objects,obj_key,obj_size))
print("Total size: %d" % total_bucket_size)
Но этот код будет работать часы .
Цель состоит в том, чтобы записать результат в приток. С InfluxDBClient это довольно просто для python.
Любая идея, почему мой код boto3 занимает так много времени? Что я могу изменить, чтобы ускорить код?