我正在使用AWS lambda和Amazon s3进行存储。亚马逊s3对获取bucket请求有一定的定价。但考虑使用Pythonboto3,得到请求是什么呢。例如,我想获得100个最后上传的对象,但我在一个bucket中有1000个对象。以下是我做的
for obj in list(buck.objects.all())[-100:]:
key = obj.key
body = obj.get()['Body'].read()
#something
我的问题是list(buck.objects.all(((是否意味着我得到了所有1000个对象并为1000个get请求付费,或者我真的只得到了100个我想要的对象?
TL;DR,它将执行ListObjects
,然后执行100个GetObject
s。
资源代表一个面向对象的AmazonWebServices(AWS(接口。它们提供了比服务客户端进行的原始低级调用更高级别的抽象。
所以答案是否定的,资源将按需发出请求。在您的示例中,由于您编写了一个针对100个对象的for循环,它将执行ListObjects
低级操作。然后,由于obj.key
信息已经在ListObjects
呼叫中提供,因此它将不会进行像HeadObject
那样的额外呼叫。接下来,由于您为100个对象中的每一个请求了对象内容,Boto3将为每个对象执行一个GetObject
。