Python Boto3 - как проверить, полностью ли записан файл s3, перед тем как начать процесс копирования в другое ведро - PullRequest
0 голосов
/ 24 мая 2018

Как убедиться, что Процесс A полностью записал большой файл (5+ ГБ) в AWS S3 Bucket A, прежде чем Process B начнет копировать файл в AWS S3 Bucket B с помощью boto3?

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

Вы обязательно должны использовать уведомление о событии s3 в качестве триггера для лямбда-функции, которая копирует ваш файл из корзины A в корзину B. Триггер гарантирует, что ваше копирование начнется после полной загрузки файла.

Более того, если у вас есть дополнительные операции для выполнения, вы можете использовать функции шага AWS, в которых вы можете определить рабочий процесс ваших процессов, например, процесс B запустится через 2 секунды после процесса A, процессы C и D будут выполненыпараллельно после завершения процесса B и т. д.

0 голосов
/ 01 октября 2018

Я также делаю загрузки до 40 ГБ.

Поскольку я выполняю многоэтапную загрузку, я проверяю, является ли файл, в который я пишу, closed.Файл S3 (объект) закрывается только после завершения всех операций.

Другой способ - использовать асинхронную очередь задач, такую ​​как Celery.Вы получите уведомление, когда задача будет выполнена.

Я сейчас использую Golang, но оба эти метода очень хорошо сработали для меня.

0 голосов
/ 25 мая 2018

Если в Amazon S3 создается новый объект, он появится только после завершения загрузки.Другие процессы не смогут просматривать его, пока не завершится загрузка.

Объекты не могут быть обновлены в S3.Скорее они заменены новым объектом.Таким образом, если объект находится в процессе обновления, он все равно будет отображаться как старый объект для других процессов.

Лучшим способом будет запуск процесса B с помощью Настройка уведомлений о событиях Amazon S3 .Как только новый объект загружен, S3 может вызвать лямбда-функцию (или отправить уведомление), которая затем может выполнить второй шаг.

...