Параллельная загрузка в Amazon S3 с использованием Ruby и amazon.rubyforge.org - PullRequest
2 голосов
/ 15 июля 2010

Я использую сервис Amazon S3 для загрузки разных каталогов (и файлов внутри) в разные сегменты (каталог -> блок).Я пишу в Ruby, и я использую lib http://amazon.rubyforge.org.

Файлы небольшие (около 20 КБ).

Я бы хотел загружать каталоги параллельно (используя много потоков) но я должен использовать синхронизацию вокруг S3Object.store

@mutex.synchronize do
  S3Object.store(s3_obj_name, open(image_name), bucket_name)
end

Если я не использую синхронизацию, я получаю Net::HTTPBadResponse исключение!Итак, с синхронизацией я утратил преимущества использования параллельного программирования.

У вас есть идеи о том, как преуспеть в параллельной загрузке?

Спасибо, Алессандро DS

1 Ответ

4 голосов
/ 23 июля 2010

Похоже, что используемая вами библиотека ruby ​​s3 не является поточно-ориентированной: http://rubyforge.org/tracker/index.php?func=detail&aid=8162&group_id=2409&atid=9357

Так что ваши варианты включают в себя:

  • Напишите патч для этой библиотеки, чтобы сделать ее поточнобезопасной (я не специалист по рубину, не уверен, насколько сложно это сделать)
  • Найдите другую библиотеку S3 ruby, которая является поточно-ориентированной (я гуглил ее и не увидел ничего очевидного)
  • Напишите короткий скрипт ruby, который выполняет один вызов S3Object.store, и выполните его из родительского сценария ruby. Тогда каждый вызов store () будет проходить в отдельном процессе, и проблема безопасности потоков не будет вас беспокоить

Эти опции предполагают, что вы хотите придерживаться ruby. Надеюсь, это поможет.

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