Асинсио здесь вам не поможет, к сожалению.
Во-первых и самое главное, boto3
не осведомлен об асинхронности; он не знает, как использовать цикл asyncio для создания соединений, он просто работает в одном синхронном потоке. (Конечно, вы можете использовать несколько потоков или multiprocessing
подпроцессов для выполнения запросов, но смотрите ниже, почему это тоже не поможет.)
Основной вызов функции S3 .objects.filter
делает list_objects_v2
, что позволяет составить один список до 1000 ключей на запрос. Если возвращено более 1000 ключей, значение результата будет содержать IsTruncated=True
и NextContinuationToken
, которые можно использовать для получения следующей страницы результатов.
Вы не можете предсказать последовательность ContinuationToken
с, поэтому вы не можете распараллелить вещи по токену продолжения.
Если вы знаете больше знаете о префиксах, которые вы ищете, вы можете распараллелить их, например - если вы ищете префикс 'aaa/bbb'
, и вы знаете его ключи это может быть aaa/bbb/0...
, aaa/bbb/1...
, aaa/bbb/2...
, вы можете выполнять эти запросы параллельно, чтобы повысить производительность.