Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 29, 2015 17:55:20

alex925
Зарегистрирован: 2015-01-08
Сообщения: 204
Репутация: +  14  -
Профиль   Отправить e-mail  

Одновременное скачивание нескольких файлов

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

По этому подскажите пожалуйста в какую строну мне смотреть? Как реализовать параллельное скачивание нескольких файлов с возможностью отмены загрузки?

Офлайн

#2 Янв. 30, 2015 01:09:22

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9958
Репутация: +  856  -
Профиль   Отправить e-mail  

Одновременное скачивание нескольких файлов

Сделай очередь сообщений queue.Queue() и в неё добавляй сообщения для потоков. А потоки пусть читают из неё сообщения.



Офлайн

#3 Янв. 30, 2015 01:14:54

alex925
Зарегистрирован: 2015-01-08
Сообщения: 204
Репутация: +  14  -
Профиль   Отправить e-mail  

Одновременное скачивание нескольких файлов

py.user.next вы наверно меня не совсем правильно поняли, проблема не в том, что на пример при наступлении определённого события, не начинать скачивать новые файлы (там все тривиально), а в том, что нужно прервать загрузку которая уже идёт в данный момент времени.

Офлайн

#4 Янв. 30, 2015 01:24:52

alex925
Зарегистрирован: 2015-01-08
Сообщения: 204
Репутация: +  14  -
Профиль   Отправить e-mail  

Одновременное скачивание нескольких файлов

Сейчас ещё раз залез в доку и кажется нашёл способ прервать скачиваение. У функции urllib.request.urlretrieve есть параметр reporthook, в который можно передать функцию, которая будет периодически вызываться как раз в ней можно отслеживать нужное сообщение и прерывать скачивание.

Офлайн

#5 Янв. 31, 2015 00:02:53

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9958
Репутация: +  856  -
Профиль   Отправить e-mail  

Одновременное скачивание нескольких файлов

alex925
нужно прервать загрузку которая уже идёт в данный момент времени
Ну, я это и имел в виду: поток получает сообщение от менеджера через очередь, а потом прерывает свою загрузку. А что у него там загружается и как, это он сам знает (средства могут меняться).

У меня в одной программе загрузка вообще передаётся на внешний wget.



Отредактировано py.user.next (Янв. 31, 2015 00:04:21)

Офлайн

#6 Янв. 31, 2015 00:34:05

alex925
Зарегистрирован: 2015-01-08
Сообщения: 204
Репутация: +  14  -
Профиль   Отправить e-mail  

Одновременное скачивание нескольких файлов

py.user.next
а потом прерывает свою загрузку
Ну я сначала не понимал как именно прервать загрузку, не знал об аргументе reporthook.

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

Офлайн

#7 Янв. 31, 2015 05:10:31

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

Одновременное скачивание нескольких файлов

alex925
Ну хочется как можно меньше зависимостей и кросслатформенности. По этому проще с помощью python качать.

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

python -m wget [options] <URL> 

import wget

https://pypi.python.org/pypi/wget/2.2

Офлайн

#8 Янв. 31, 2015 12:21:07

alex925
Зарегистрирован: 2015-01-08
Сообщения: 204
Репутация: +  14  -
Профиль   Отправить e-mail  

Одновременное скачивание нескольких файлов

Alen
Спасибо, не знал об этом модуле

Офлайн

#9 Янв. 31, 2015 23:45:28

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9958
Репутация: +  856  -
Профиль   Отправить e-mail  

Одновременное скачивание нескольких файлов

alex925
Ну я сначала не понимал как именно прервать загрузку, не знал об аргументе reporthook.
Я тоже не знал :)
Это не главное, так как сегодня оно есть, завтра - нет. Сейчас качаешь через urllib, завтра будешь качать через что-нибудь другое.

alex925
Ну хочется как можно меньше зависимостей и кросслатформенности.
Там я его выбрал, так как он и качает быстро, и довольно информативно всё показывает. Программой пользуюсь уже года два. Да, не кросс, зато закачал уже дофига. :)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version