Возобновление листинга ведра s3 через boto

Таким образом, я перебираю более 2 миллионов объектов: -

conn = boto.connect_s3('xxx','xxx')
bucket = conn.lookup('bucket_name')

for key in bucket.list():
  somefunction(key.name)

Скажем, это не удается на миллионном объекте, как мне возобновить эту операцию с этой точки?


person martin blank    schedule 18.08.2011    source источник


Ответы (2)


Я понял это, посмотрев на источник boto.

def list(self, prefix='', delimiter='', marker='', headers=None):

Передача key.name маркеру позволит вам возобновить работу с этой точки.

person martin blank    schedule 18.08.2011

Пример возобновления запросов с использованием свойства marker.

Это также полезно, если вы хотите выполнить рекурсию по поддеревьям или иметь много миллионов объектов для обхода и не хотите, чтобы они были в одном списке.

marker = None
while True:
    keys = bucket.get_all_keys(marker=marker)
    last_key = None

    for k in keys:
        # TODO Do something with your keys!
        last_key = k.name

    if not keys.is_truncated:
        break

    marker = last_key
person Joseph Lust    schedule 29.12.2016