Я хотел бы обработать огромную папку с XML-файлами, расположенными в сегментах s3. Я хотел бы сделать это распределенным способом в Python.
Поэтому я сначала определяю paginator с библиотекой boto3
, настраивая (например) размер страницы 100
элементов (см. * 1005). * doc )
profile = boto3.Session()
client = profile.client('s3')
paginator = client.get_paginator('list_objects')
page_iterator = paginator.paginate(
Bucket='my-bucket',Prefix='my-prefix',
PaginationConfig={'PageSize': 100}
)
после этого с помощью пакета concurrent.futures
я создаю пул 10
потоков, каждый из которых вызывает my_process_method
:
def my_process_method(pages):
for page in pages['Contents']:
# ...process...
with concurrent.futures.ThreadPoolExecutor(10) as executor:
executor.map(my_process_method, page_iterator)
Я быхотелось бы знать, есть ли какие-то недостатки в этом примере, например. одновременные boto3
вызовы API могут вызывать какие-то проблемы