Найти - Пользователи
Полная версия: Одновременное скачивание нескольких файлов
Начало » Python для новичков » Одновременное скачивание нескольких файлов
1
alex925
Сейчас закачкой файлов занимается несколько потоков, такой вариант меня полностью устраивает, но есть одно, но.
При модернизировании программы захотел добавить возможность отменять начатую загрузку, но при изучении вопроса я не нашёл способов этого сделать, потому что на потоки нельзя воздействовать снаружи. Максимум, что можно сделать это сделать их демонами и при завершении работы основного потока они тоже завершатся, такой вариант только частично решает мою проблему и то на сколько я понял его не рекомендуется использовать.

По этому подскажите пожалуйста в какую строну мне смотреть? Как реализовать параллельное скачивание нескольких файлов с возможностью отмены загрузки?
py.user.next
Сделай очередь сообщений queue.Queue() и в неё добавляй сообщения для потоков. А потоки пусть читают из неё сообщения.
alex925
py.user.next вы наверно меня не совсем правильно поняли, проблема не в том, что на пример при наступлении определённого события, не начинать скачивать новые файлы (там все тривиально), а в том, что нужно прервать загрузку которая уже идёт в данный момент времени.
alex925
Сейчас ещё раз залез в доку и кажется нашёл способ прервать скачиваение. У функции urllib.request.urlretrieve есть параметр reporthook, в который можно передать функцию, которая будет периодически вызываться как раз в ней можно отслеживать нужное сообщение и прерывать скачивание.
py.user.next
alex925
нужно прервать загрузку которая уже идёт в данный момент времени
Ну, я это и имел в виду: поток получает сообщение от менеджера через очередь, а потом прерывает свою загрузку. А что у него там загружается и как, это он сам знает (средства могут меняться).

У меня в одной программе загрузка вообще передаётся на внешний wget.
alex925
py.user.next
а потом прерывает свою загрузку
Ну я сначала не понимал как именно прервать загрузку, не знал об аргументе reporthook.

py.user.next
У меня в одной программе загрузка вообще передаётся на внешний wget.
Ну хочется как можно меньше зависимостей и кросслатформенности. По этому проще с помощью python качать.
Alen
alex925
Ну хочется как можно меньше зависимостей и кросслатформенности. По этому проще с помощью python качать.

Кроссплатформенно:

python -m wget [options] <URL> 

import wget

https://pypi.python.org/pypi/wget/2.2
alex925
Alen
Спасибо, не знал об этом модуле
py.user.next
alex925
Ну я сначала не понимал как именно прервать загрузку, не знал об аргументе reporthook.
Я тоже не знал :)
Это не главное, так как сегодня оно есть, завтра - нет. Сейчас качаешь через urllib, завтра будешь качать через что-нибудь другое.

alex925
Ну хочется как можно меньше зависимостей и кросслатформенности.
Там я его выбрал, так как он и качает быстро, и довольно информативно всё показывает. Программой пользуюсь уже года два. Да, не кросс, зато закачал уже дофига. :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB