Как эффективно скопировать все файлы из одного каталога в другой в Amazon S3 Bucket с Boto? - PullRequest
5 голосов
/ 10 февраля 2012

Мне нужно скопировать все ключи из / old / dir / в / new / dir в амазонку S3. Я придумал этот скрипт (быстрый взлом):

import boto

s3 = boto.connect_s3()
thebucket = s3.get_bucket("bucketname")
keys = thebucket.list('/old/dir')
for k in keys:
    newkeyname = '/new/dir' + k.name.partition('/old/dir')[2]
    print 'new key name:', newkeyname
    thebucket.copy_key(newkeyname, k.bucket.name, k.name)

Пока это работает, но намного медленнее, чем то, что я могу сделать вручную в графической консоли управления, просто скопировав / вставив мышкой. Очень расстраивает и есть много ключей для копирования ...

Знаете ли вы более быстрый метод? Благодарю.

Редактировать: возможно, я могу сделать это с параллельными процессами копирования. Я не очень знаком с методами копирования ключей boto и с тем, сколько параллельных процессов я могу отправить amazon.

Edit2: я сейчас изучаю многопроцессорность Python. Посмотрим, смогу ли я отправить 50 операций копирования одновременно ...

Редактировать 3: я пытался с 30 параллельными копиями с использованием модуля многопроцессорной обработки Python. Копирование было намного быстрее, чем в консоли, и менее подвержено ошибкам. Существует новая проблема с большими файлами (> 5 ГБ): boto вызывает исключение. Мне нужно отладить это перед публикацией обновленного скрипта.

1 Ответ

1 голос
/ 14 марта 2012

Относительно вашей проблемы с файлами более 5 ГБ: S3 не поддерживает загрузку файлов более 5 ГБ с использованием метода PUT, что и пытается сделать бот ( см. Источник boto , документация Amazon S3 ).

К сожалению, я не уверен, как вы можете обойти это, кроме загрузки и повторной загрузки в загрузке из нескольких частей. Я не думаю, что boto поддерживает операцию многократного копирования (если такая вещь вообще существует)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...