Форум сайта python.su
Сейчас закачкой файлов занимается несколько потоков, такой вариант меня полностью устраивает, но есть одно, но.
При модернизировании программы захотел добавить возможность отменять начатую загрузку, но при изучении вопроса я не нашёл способов этого сделать, потому что на потоки нельзя воздействовать снаружи. Максимум, что можно сделать это сделать их демонами и при завершении работы основного потока они тоже завершатся, такой вариант только частично решает мою проблему и то на сколько я понял его не рекомендуется использовать.
По этому подскажите пожалуйста в какую строну мне смотреть? Как реализовать параллельное скачивание нескольких файлов с возможностью отмены загрузки?
Офлайн
Сделай очередь сообщений queue.Queue() и в неё добавляй сообщения для потоков. А потоки пусть читают из неё сообщения.
Офлайн
py.user.next вы наверно меня не совсем правильно поняли, проблема не в том, что на пример при наступлении определённого события, не начинать скачивать новые файлы (там все тривиально), а в том, что нужно прервать загрузку которая уже идёт в данный момент времени.
Офлайн
Сейчас ещё раз залез в доку и кажется нашёл способ прервать скачиваение. У функции urllib.request.urlretrieve есть параметр reporthook, в который можно передать функцию, которая будет периодически вызываться как раз в ней можно отслеживать нужное сообщение и прерывать скачивание.
Офлайн
alex925Ну, я это и имел в виду: поток получает сообщение от менеджера через очередь, а потом прерывает свою загрузку. А что у него там загружается и как, это он сам знает (средства могут меняться).
нужно прервать загрузку которая уже идёт в данный момент времени
Отредактировано py.user.next (Янв. 31, 2015 00:04:21)
Офлайн
py.user.nextНу я сначала не понимал как именно прервать загрузку, не знал об аргументе reporthook.
а потом прерывает свою загрузку
py.user.nextНу хочется как можно меньше зависимостей и кросслатформенности. По этому проще с помощью python качать.
У меня в одной программе загрузка вообще передаётся на внешний wget.
Офлайн
alex925
Ну хочется как можно меньше зависимостей и кросслатформенности. По этому проще с помощью python качать.
python -m wget [options] <URL>
import wget
Офлайн
Alen
Спасибо, не знал об этом модуле
Офлайн
alex925Я тоже не знал :)
Ну я сначала не понимал как именно прервать загрузку, не знал об аргументе reporthook.
alex925Там я его выбрал, так как он и качает быстро, и довольно информативно всё показывает. Программой пользуюсь уже года два. Да, не кросс, зато закачал уже дофига. :)
Ну хочется как можно меньше зависимостей и кросслатформенности.
Офлайн