Я борюсь с использованием concurrent.futures в python. Я пытаюсь перебрать большое количество объектов S3. Из-за количества учетных записей, групп и объектов это может занять очень много времени. Дольше, чем мои учетные данные STS хороши, и достаточно долго, я не верю, что сценарий не будет прерван.
Я ожидал бы, что следующий код будет работать, и, хотя он действительно производит вывод, который я ищу, при тестировании с небольшим количеством сегментов, он записывает только в завершенные и завершенные файлы после полной обработки каждого сегмента, а не после каждого будущего. возвращается. В случае прерывания завершенные и отсутствующие файлы не записываются. Даже если много ведер уже успешно обработано.
if __name__ == '__main__':
args_results = parser.parse_args()
completed = open(args_results.completed, 'a+')
out = open(args_results.out, 'a+')
done = getCompleted(args_results.completed)
todo = getBuckets(args_results.todo)
with ThreadPoolExecutor(max_workers=10) as executor:
futures = []
for item in todo:
if item not in done:
account, bucket = item.split('|')
futures.append(executor.submit(getBucketInfo, account, bucket))
for x in as_completed(futures):
result = x.result()
out.write(result + '\n')
completed.write(result['Account'] + '|' + result['Bucket'] + '\n')
Я неправильно понимаю, как должна работать функция as_completed ()?