Я ищу библиотеку python или инструмент командной строки для параллельной загрузки нескольких файлов. Мое текущее решение заключается в том, чтобы загружать файлы последовательно, что медленно. Я знаю, что вы можете легко написать однопоточное решение на python, но я всегда сталкиваюсь с раздражающей проблемой при использовании потоковой передачи. Он предназначен для опроса большого количества XML-материалов с веб-сайтов.
Мои требования к решению:
- Должно прерываться. Ctrl + C должен немедленно прекратить все загрузки.
- Не должно быть никаких оставшихся процессов, которые вы должны убить вручную, используя kill, даже если сбой основной программы или исключение.
- Он также должен работать на Linux и Windows.
- Он должен повторять загрузки, быть устойчивыми к сетевым ошибкам и должным образом таймаутом.
- Должно быть разумно не забивать один и тот же сервер со 100+ одновременными загрузками, но ставить их в очередь разумно.
- Он должен обрабатывать важные коды статуса http, такие как 301, 302 и 304. Это означает, что для каждого файла он должен принимать значение Last-Modified как входное и загружать только, если он изменился с последнего раза.
- Предпочтительно, он должен иметь индикатор выполнения, или ему должно быть легко написать индикатор выполнения, чтобы он отслеживал ход загрузки всех файлов.
- Предпочтительно он должен использовать http keep-alive для максимизации скорости передачи.
Пожалуйста, не предлагайте, как я могу реализовать вышеуказанные требования. Я ищу готовое, проверенное сражения решение.
Я думаю, я должен описать, что я тоже хочу... У меня около 300 различных каналов передачи данных в виде файлов в формате XML, которые подаются от 50 поставщиков данных. Каждый файл имеет размер от 100 КБ до 5 МБ. Мне нужно часто их опроса (как раз в несколько минут), чтобы определить, есть ли у кого-то из них новые данные, которые мне нужно обработать. Поэтому важно, чтобы загрузчик использовал кеширование http для минимизации объема данных для извлечения. Очевидно, что он использует сжатие gzip.
Тогда большая проблема заключается в том, как использовать пропускную способность как можно эффективнее, не переступая границы. Например, один поставщик данных может считать его злоупотреблением, если вы открываете 20 одновременных подключений к своим фидам данных. Вместо этого может быть лучше использовать одно или два соединения, которые повторно используются для нескольких файлов. Или ваше собственное соединение может быть ограничено странными способами. Мой isp ограничивает количество поисков dns, которые вы можете сделать, чтобы какое-то кэширование DNS было приятным.