SASGIS

Веб-картография и навигация

Разбивка выделения при закачке на части

Запрашиваем и выполняем хотелки к SAS.Планете вне очереди

Модераторы: vdemidov, Tolik

Правила форума
Настоятельно рекомендуем ознакомиться с правилами раздела платных услуг ТУТ.

Re: Разбивка выделения при закачке на части

Сообщение vdemidov » 03 мар 2016, 16:25

Parasite писал(а):Ну так и стартуй ее - и сразу после старта открывай из нее дочерние окна.

НИЗЗЗЯЯЯ дочерние окна можно открывать только из потока ГУЯ.

Parasite писал(а):Я даже готов на то, чтобы не отдельными окошечками - а доп.полосками в том же окне закачки, или как угодно еще (на свое усмотрение).

А я не готов.

Вообще, конечно, можно просто из одного потока закачки ставить в праллель несколько запросов на закачку как это делает сейчас закачка видимой области экрана, но тогда возникают вопросы с обработкой ошибок и паузами при признаках бана. Становится непонятно что считать последним обработанным тайлом при сохранении sls. И еще куча мелких вопросов.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 157 раз.

Re: Разбивка выделения при закачке на части

Сообщение Parasite » 03 мар 2016, 17:29

vdemidov писал(а):НИЗЗЗЯЯЯ дочерние окна можно открывать только из потока ГУЯ.

Ну, значит, придется обойтись одним окошком - но задачу в пределах оного качать в N потоков. Я не против, мне визуализации без разницы.

vdemidov писал(а):паузами при признаках бана.

Тормозить все потоки при признаке бана.

vdemidov писал(а):Становится непонятно что считать последним обработанным тайлом при сохранении sls.

Наименьший по X\Y тайл (из первого из всех потоков).
При рестарте закачки с теми же установками - она так же и разобьется, качаться начнет с точки останова (строчка выше), уже укачанные ранее другими потоками тайлы (заведомо большие по X\Y, чем точка останова) отработаются как "имеется в кэше, пропускаем". Да, будет кучка дисковых операций - но это боль во спасение. Ну, или писать число N и точки остановки в каждом потоке в .sls тоже, если хочется красиво.

Короче, зайду козырями: накидываю +500рэ. Фича нужна.
The only difference between me and a mad man is that I am not mad. /Salvador Dali/
Изображение
Аватара пользователя
Parasite
Администратор
 
Сообщения: 5646
Зарегистрирован: 23 окт 2008, 17:38
Благодарил (а): 124 раз.
Поблагодарили: 512 раз.

Re: Разбивка выделения при закачке на части

Сообщение zed » 03 мар 2016, 19:01

Кстати, надо помнить про параметр MaxConnectToServerCount (def = 4), который ограничивает число одновременных http запросов. И мне кажется, что лучше сделать так, чтобы закачка по выделенной области всегда была многопоточной, без всякой разбивки полигонов и прочих трюков. Придётся хорошенько подумать над алгоритмом, например, завести очередь отправленных запросов и хитро её обрабатывать, но получится более юзабильно. Не нужно будет руками указывать число потоков, оно просто будет работать так же, как и для просмотра. Опять же, изменений в формат .sls вносить не надо и остановка при бане будет работать даже лучше - мы можем приостановить наполнение очереди, если вышел затык на каком-то тайле, а не продолжать ломиться на сервер со всех окошек.
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Re: Разбивка выделения при закачке на части

Сообщение zed » 03 мар 2016, 19:12

zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Re: Разбивка выделения при закачке на части

Сообщение zed » 03 мар 2016, 19:21

Т.е. можно предложить такой алгоритм:
- поток закачки создаёт N рабочих потоков и две очереди: запросов и ответов
- рабочие потоки наперебой берут задания из очереди запросов, обрабатывают их (качают тайлы) и результат складывают в очередь ответов
- поток закачки управляет наполняемостью очереди запросов и обрабатывает очередь ответов (проверяет код ответа, делает паузы при бане, сохраняет в кэш)

При N=1 получаем однопоточную закачку (как сейчас), при N=MaxConnectToServerCount получаем многопоточность, как в режиме просмотра. Опцию даже можно вынести в настройки, чтобы можно было выбрать как качать, при старте закачки.
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Re: Разбивка выделения при закачке на части

Сообщение vdemidov » 03 мар 2016, 19:24

zed писал(а):Т.е. можно предложить такой алгоритм:
- поток закачки создаёт N рабочих потоков и две очереди: запросов и ответов
- рабочие потоки наперебой берут задания из очереди запросов, обрабатывают их (качают тайлы) и результат складывают в очередь ответов
- поток закачки управляет наполняемостью очереди запросов и обрабатывает очередь ответов (проверяет код ответа, делает паузы при бане, сохраняет в кэш)

Да не нужно это все. Там одного потока за глаза хватит. Как хватает сейчас одного потока на карту для закачки видимой области.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 157 раз.

Re: Разбивка выделения при закачке на части

Сообщение zed » 03 мар 2016, 19:32

Один поток даёт задания, а качает всё равно пул потоков. Вот если как-то дотянуться до того пула и давать ему задания напрямую, то да.
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Re: Разбивка выделения при закачке на части

Сообщение vdemidov » 03 мар 2016, 19:34

zed писал(а):Один поток даёт задания, а качает всё равно пул потоков. Вот если как-то дотянуться до того пула и давать ему задания напрямую, то да.

Ну да. Все потоки закачки и закачка видимой области только ставят задания пулу потоков. Дотягиваться до него не нужно. Оно само и без этого сейчас работает.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 157 раз.

Re: Разбивка выделения при закачке на части

Сообщение zed » 03 мар 2016, 19:35

Вспомнил - тот пул сильно завязан на режим, для которого писался. Он там и бан автоматически обрабатывает и в кэш сам пишет. В общем, слишком специфичен и сюда его не воткнуть.
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Re: Разбивка выделения при закачке на части

Сообщение Parasite » 03 мар 2016, 19:37

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

Было бы вообще идеально, но я такое даже просить боюсь. :lol:
А ведь с периодичностью этак раз в месяц разговоры про это заходят, но... Посему прошу то, что (как лично мне видится) должно выйти меньшей кровью, и при тех же бонусах в итоге.

Впрочем, если сделать групповой заказ на многопоточную качалку - то лично я не против, а очень даже за. Озвучивайте финальную цену вопроса, и пускай народ подтягивается и голосует рублем. От себя тут пока что вкладываю 1000р, как указано ранее.
The only difference between me and a mad man is that I am not mad. /Salvador Dali/
Изображение
Аватара пользователя
Parasite
Администратор
 
Сообщения: 5646
Зарегистрирован: 23 окт 2008, 17:38
Благодарил (а): 124 раз.
Поблагодарили: 512 раз.

Пред.След.

Вернуться в Внеочередное исполнение хотелок

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0