alex925
Янв. 29, 2015 17:55:20
Сейчас закачкой файлов занимается несколько потоков, такой вариант меня полностью устраивает, но есть одно, но.
При модернизировании программы захотел добавить возможность отменять начатую загрузку, но при изучении вопроса я не нашёл способов этого сделать, потому что на потоки нельзя воздействовать снаружи. Максимум, что можно сделать это сделать их демонами и при завершении работы основного потока они тоже завершатся, такой вариант только частично решает мою проблему и то на сколько я понял его не рекомендуется использовать.
По этому подскажите пожалуйста в какую строну мне смотреть? Как реализовать параллельное скачивание нескольких файлов с возможностью отмены загрузки?
py.user.next
Янв. 30, 2015 01:09:22
Сделай очередь сообщений queue.Queue() и в неё добавляй сообщения для потоков. А потоки пусть читают из неё сообщения.
alex925
Янв. 30, 2015 01:14:54
py.user.next вы наверно меня не совсем правильно поняли, проблема не в том, что на пример при наступлении определённого события, не начинать скачивать новые файлы (там все тривиально), а в том, что нужно прервать загрузку которая уже идёт в данный момент времени.
alex925
Янв. 30, 2015 01:24:52
Сейчас ещё раз залез в доку и кажется нашёл способ прервать скачиваение. У функции urllib.request.urlretrieve есть параметр reporthook, в который можно передать функцию, которая будет периодически вызываться как раз в ней можно отслеживать нужное сообщение и прерывать скачивание.
py.user.next
Янв. 31, 2015 00:02:53
alex925
нужно прервать загрузку которая уже идёт в данный момент времени
Ну, я это и имел в виду: поток получает сообщение от менеджера через очередь, а потом прерывает свою загрузку. А что у него там загружается и как, это он сам знает (средства могут меняться).
У меня в одной программе загрузка вообще передаётся на внешний wget.
alex925
Янв. 31, 2015 00:34:05
py.user.next
а потом прерывает свою загрузку
Ну я сначала не понимал как именно прервать загрузку, не знал об аргументе reporthook.
py.user.next
У меня в одной программе загрузка вообще передаётся на внешний wget.
Ну хочется как можно меньше зависимостей и кросслатформенности. По этому проще с помощью python качать.
Alen
Янв. 31, 2015 05:10:31
alex925
Ну хочется как можно меньше зависимостей и кросслатформенности. По этому проще с помощью python качать.
Кроссплатформенно:
python -m wget [options] <URL>
https://pypi.python.org/pypi/wget/2.2
alex925
Янв. 31, 2015 12:21:07
Alen
Спасибо, не знал об этом модуле
py.user.next
Янв. 31, 2015 23:45:28
alex925
Ну я сначала не понимал как именно прервать загрузку, не знал об аргументе reporthook.
Я тоже не знал :)
Это не главное, так как сегодня оно есть, завтра - нет. Сейчас качаешь через urllib, завтра будешь качать через что-нибудь другое.
alex925
Ну хочется как можно меньше зависимостей и кросслатформенности.
Там я его выбрал, так как он и качает быстро, и довольно информативно всё показывает. Программой пользуюсь уже года два. Да, не кросс, зато закачал уже дофига. :)