Параллельная загрузка файлов - PullRequest
6 голосов
/ 25 января 2012

Для загрузки файлов я создаю объект urlopen (класс urllib2) и читаю его кусками.

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

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

Ответы [ 3 ]

24 голосов
/ 26 января 2012

В отношении параллельных запросов вы можете использовать urllib3 или запросов .

Мне потребовалось некоторое время, чтобы составить список похожих вопросов:

Поиск [python] +download +concurrent дает следующие интересные:

Ищет [python] +http +concurrent дает эти:

Ищу [python] +urllib2 +slow:

Ищу [python] +download +many:

3 голосов
/ 22 ноября 2012

Как мы уже говорили, я сделал такой с помощью PycURL.

Единственное, что мне нужно было сделать, это pycurl_instance.setopt(pycurl_instance.NOSIGNAL, 1), чтобы предотвратить сбои.

Я использовал APScheduler для запуска запросов в отдельных потоках. Благодаря вашим советам изменить ожидание занятости от while True: pass до while True: time.sleep(3) в основном потоке, код ведет себя довольно хорошо, и использование модуля Runner из приложения пакета python-daemon практически готово для использования в качестве типичного демона UN * X.

3 голосов
/ 25 января 2012

Похоже, вы хотите использовать один из доступных вариантов HTTP Range .

edit Обновлена ​​ссылка для указания на сохраненный w3.org RFC

...