Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

С уважением!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top