したがって、200万を超えるオブジェクトを繰り返し処理しています:-
conn = boto.connect_s3('xxx','xxx')
bucket = conn.lookup('bucket_name')
for key in bucket.list():
somefunction(key.name)
100 万番目のオブジェクトで失敗したとします。その時点からこの操作を再開するにはどうすればよいでしょうか。
botoソースを見て、それを理解しました。
def list(self, prefix='', delimiter='', marker='', headers=None):
key.name を marker に渡すと、その時点から操作を再開できます。
marker
プロパティを使用してリクエストを再開する例。
これは、サブツリーを再帰的に処理したい場合や、クロールする数百万のオブジェクトがあり、それらを 1 つのリストにまとめたくない場合にも役立ちます。
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