2015-12-03 5 views
0

У нас есть огромное количество ключей в ковше, B, на S3, и нам нужно скачать их с s3 с помощью boto, а затем перебрать все их в python. Единственный способ, которым мы нашли до сих пор получения ключей является вызовом list(), который пытается загрузить все ключи от B сразу, то есть:Получить ключи в кусках от AWS S3

bucket = boto.connect_s3().get_bucket(`B`) 
keys = bucket.list() 

Это всегда висит у нас, по-видимому из-за огромного количество ключей. Он отлично работает, если мы получаем ключи для другого ведра с меньшим количеством общих ключей или если используется префикс. Мы хотели бы избежать использования префикса для ведра B по конкретным причинам. Есть ли способ получить все ключи от B, но в кусках?

+0

Учитывая, что http://boto.readthedocs.org/en/latest/ref/s3.html#boto.s3.bucket.Bucket.list как ссылка, список вызовов boto() также предоставляет функцию разбивки на страницы. Единственное, что вам придется перебирать и хранить список ключей в другом списке. –

ответ

1

Вы должны быть в состоянии использовать сам Bucket объект в качестве генератора, например:

s3 = boto.connect_s3() 
bucket = s3.get_bucket('foo') 
for key in bucket: 
    <do stuff with key> 

При использовании таким образом, Bucket объект будет делать разбиение на страницы результатов для вас в фоновом режиме и только захватить страницу ключей за раз.

Смежные вопросы