Nat*_*ate 2 python amazon-s3 amazon-web-services aws-cli
我的脚本正在运行,但是我正在扫描的存储桶很大,并且在一段时间后超时。我可以做什么来提高效率或从特定位置开始?
import boto3
s3 = boto3.resource('s3')
b = s3.Bucket('my_bucket')
for obj in b.objects.all():
# Open the file, run some RegEx to find some data. If it's found, output to a log file
Run Code Online (Sandbox Code Playgroud)
我遇到的第一个问题是桶的大小。大约有 150 万个物体。我的代码打开文本文件寻找一些正则表达式,如果正则表达式匹配,那么它会输出对象名称和找到的内容。
运行脚本大约一个小时后,它在抛出错误之前输入了大约 40k 对象:
requests.exceptions.ConnectionError: ('Connection aborted.', BadStatusLine("''",))
Run Code Online (Sandbox Code Playgroud)
或者
object at 0x109e82d50>: Failed to establish a new connection: [Errno 60] Operation timed out',))
Run Code Online (Sandbox Code Playgroud)
它正在搜索的搜索项是按字母顺序排列的,因此我们会说它通过了“E”部分,然后超时。我想从以“F”开头的对象开始。
如果您的 Amazon S3 存储桶中有大量对象,那么这objects.all()
不是一种有效的迭代方法,因为它会尝试将它们同时加载到内存中。
相反,应list_objects_v2()
以 1000 个为一组对对象进行分页。然后,使用ContinuationToken
返回的值再次调用它。
您实际上需要一个for
循环调用list_objects_v2()
和另一个for
循环来循环每个对象。
归档时间: |
|
查看次数: |
4642 次 |
最近记录: |