Многопоточный парсер

  • Автор темы Автор темы Onizuka
  • Дата начала Дата начала

Onizuka

Client
Регистрация
04.09.2019
Сообщения
57
Реакции
29
Баллы
18
Всем привет, подскажите пожалуйста правильное решение для такой ситуации:
Делаю многопоточный парсер, но при этом нужно чтобы первую страницу парсило 1 раз (в многопотоке она будет парсится с каждого потока), как это правильно реализовать ?
Ну т.е. есть сайт, на главной странице которого, перечень марок автомобилей к примеру 100 и они периодически меняются, я парсю ссылки на эти марки в список (именно здесь нужно парсить 1 раз, как-то сделать чтобы только первый поток выполнял это и если возможно чтобы остальные начинали работать после завершения парсинга этой 1 страницы 1-м потоком) далее каждый поток берет ссылку с удалением из списка и продолжает работу по каждой из ссылок, там все ок.
На данный момент делаю 2 режима "начальный парсинг" который запускаю в 1 поток для сбора ссылок с главной страницы, ну а потом меняю режим во входящих настройках и запускаю многопоточно, но как-то это слишком криво.
 
не проще 2 шаблона сделать ? 1-й парсит основную страницу в соло, 2-й шаб в многопотоке обрабатывает список.
 
не проще 2 шаблона сделать ? 1-й парсит основную страницу в соло, 2-й шаб в многопотоке обрабатывает список.
хз, мне кажется 2 шаблона это что-то похожее как и 2 режима) ну и шаблон покупать будут на зеннобокс это + комиссия (2$ немного конечно, но как-то шаблон целый выделять под парсинг 1 страницы) просто интересно можно ли это как-то в коде прописать чтоб было все красиво в 1 режиме и 1 шаблоне)
 
если будете покупать, зачем вы паритесь по этому поводу ? просто описываете свои желания в тз , а исполнитель будет решать что да как. все это реализуемо в рамках одного шаблона.
 
может типа как-то возможно прописать, если поток запущен не первый, то делаем паузу к примеру перед началом работы потока 2 минуты) и соответственно если поток запущен первым, то выполнить парсинг 1 страницы
 
если будете покупать, зачем вы паритесь по этому поводу ? просто описываете свои желания в тз , а исполнитель будет решать что да как. все это реализуемо в рамках одного шаблона.
я продавать буду, а не покупать )
 
еще думал как вариант использовать глобальную переменную, но слышал за них только негатив и стремно их юзать, ато будет все работать не так и не поймешь
 
я продавать буду, а не покупать )
упс *HAHA*

придеться вам разбираться с темой локов. это полюбому. тут неважно что локировать, глобальную переменную или файл. принцип один.
примерно можно описать так. запускается куча потоков, кто то первый успевает залочить файл и считывает с него инфу. остальные потоки на этом месте впадают в каматоз. например видит что первая страница не спарсена, он ставит метку в файл что будет парсить и начинает парсить. остальные шабы после разлока видят что другой поток парсит и начинают периодически опрашивать файл на наличие нужной метки. первый поток заканчивает и выставляет нужную метку в файл. и все дружно начинают окучивать список. ну это в общем. надо будет учесть максимальные таймауты ожидания.
 
Onizuka, зачем ты себе проблему создаешь?
В зенке проще всего сделать или двумя шаблонами или в одном опционально. А разница только в том, что делая этими способами придется два раза запустить проект вместо одного. Твой клиент навряд ли перетрудится.
 
Onizuka, зачем ты себе проблему создаешь?
В зенке проще всего сделать или двумя шаблонами или в одном опционально. А разница только в том, что делая этими способами придется два раза запустить проект вместо одного. Твой клиент навряд ли перетрудится.
думал что есть простое, удобное решение в пару строк кода) увы)
 
Создай список, помести туда 1 строчку, кто первый заберет с удалением, тот и молодец, остальные по красной ветке выйдут на другие кубики в виду отсутствия строки.
Списки сами по себе уже залочены.
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)