Я хочу скопировать ключи из ведер между двумя разными учетными записями, используя boto3 api's. В boto3, я выполнил следующий код и копия работалаparallell копия ведер/ключей из boto3 или boto api между двумя разными учетными записями/соединениями
source = boto3.client('s3')
destination = boto3.client('s3')
destination.put_object(source.get_object(Bucket='bucket', Key='key'))
В основном я Извлечение данных из GET и вставляя, что с PUT на другой счет.
На подобных линиях в Boto апи, я сделал следующее
source = S3Connection()
source_bucket = source.get_bucket('bucket')
source_key = Key(source_bucket, key_name)
destination = S3Connection()
destination_bucket = destination.get_bucket('bucket')
dist_key = Key(destination_bucket, source_key.key)
dist_key.set_contents_from_string(source_key.get_contents_as_string())
Приведенный выше код достигает цели копирования данных любого типа. Но скорость действительно очень медленная. Я получаю около 15-20 секунд, чтобы скопировать данные на 1 ГБ. И мне нужно скопировать 100GB плюс. Я попробовал python mutithreading, в котором каждый поток выполняет операцию копирования. Производительность была плохая, так как потребовалось 30 секунд для копирования 1 ГБ. Я подозреваю, что проблема с GIL может быть здесь. Я выполнял многопроцессорную обработку, и получаю тот же результат, что и для одного процесса, т. Е. 15-20 секунд для 1 ГБ файла.
Я использую очень высокий сервер с 48 ядрами и 128 ГБ оперативной памяти. Скорость сети в моей среде составляет 10 ГБ. Большинство результатов поиска рассказывают о копировании данных между ведрами в одной учетной записи, а не через учетные записи. Может ли кто-нибудь направить меня сюда. Является ли мой подход неправильным? У кого-то есть лучшее решение?
Спасибо за предложение. Я использовал boto3.upload_fileobj() для передачи данных между учетными записями. Для копирования 1 ГБ файла потребовалось 17 секунд. Сгруппируйте код с несколькими процессами и увеличьте количество потоков до 25 в boto3.s3.transfer.TransferConfig в каждом процессе. 1 ГБ скопировано через 9-10 секунд. :) Я играю с параметрами TransferConfig и, надеюсь, 1 ГБ будет скопирован через 5-7 секунд. Cheers – bechkam7