Загрузка большого количества файлов с S3 - PullRequest
2 голосов
/ 27 июня 2009

Какой самый быстрый способ получить большое количество файлов (относительно небольшие 10-50 КБ) из Amazon S3 от Python? (Порядка 200 000 - миллион файлов).

В настоящее время я использую boto для генерации подписанных URL-адресов и использую PyCURL для получения файлов один за другим.

Может ли какой-нибудь тип параллелизма помочь? PyCurl.CurlMulti объект?

Я открыт для всех предложений. Спасибо!

Ответы [ 6 ]

2 голосов
/ 27 июня 2009

Я ничего не знаю о Python, но в целом вы бы хотели разбить задачу на более мелкие куски, чтобы они могли выполняться одновременно. Вы можете разбить его по типу файла, алфавиту или чему-то еще, а затем запустить отдельный скрипт для каждой части разбивки.

1 голос
/ 27 июня 2009

Вы можете рассмотреть возможность использования s3fs и просто запускать параллельные команды файловой системы из Python.

1 голос
/ 27 июня 2009

В случае с python, так как это связано с IO, несколько потоков будут использовать процессор, но он, вероятно, будет использовать только одно ядро. Если у вас несколько ядер, вы можете рассмотреть возможность использования нового многопроцессорного модуля . Даже тогда вы можете захотеть, чтобы каждый процесс использовал несколько потоков. Вам нужно будет немного настроить количество процессоров и потоков.

Если вы используете несколько потоков, это хороший кандидат для класса Очередь .

0 голосов
/ 06 июля 2009

Каждую работу можно выполнить с помощью соответствующих инструментов:)

Вы хотите использовать python для стресс-тестирования S3 :), поэтому я предлагаю найти программу для загрузки большого объема и передать ссылку на нее.

В Windows у меня есть опыт установки программы ReGet (условно-бесплатная, от http://reget.com) и создания задач загрузки через интерфейс COM.

Конечно, могут существовать другие программы с удобным интерфейсом.

Привет!

0 голосов
/ 27 июня 2009

как насчет потока + очереди, мне нравится эта статья: Практическое многопоточное программирование на Python

0 голосов
/ 27 июня 2009

Я использую txaws с витой для работы S3, хотя вам, вероятно, понадобится просто получить аутентифицированный URL и использовать twisted.web.client.DownloadPage (по умолчанию с удовольствием перейдет из потока в файл без особого взаимодействие).

Twisted позволяет легко работать с любым параллелизмом, который вы хотите. Для чего-то порядка 200 000 я бы, вероятно, сделал бы генератор и использовал бы кооператор для установки моего параллелизма и просто позволил бы генератору генерировать каждый требуемый запрос на загрузку.

Если вы не знакомы с витой, вы обнаружите, что к этой модели требуется немного времени, но она того стоит. В этом случае я ожидаю, что это потребует минимальных затрат ресурсов процессора и памяти, но вам придется беспокоиться о дескрипторах файлов. В перспективном брокере довольно легко смешать и распределить работу между несколькими компьютерами, если вам понадобится больше файловых дескрипторов или если у вас есть несколько соединений, которые вы хотите отключить.

...