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

Onizuka

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

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
не проще 2 шаблона сделать ? 1-й парсит основную страницу в соло, 2-й шаб в многопотоке обрабатывает список.
 

Onizuka

Client
Регистрация
04.09.2019
Сообщения
54
Благодарностей
27
Баллы
18
не проще 2 шаблона сделать ? 1-й парсит основную страницу в соло, 2-й шаб в многопотоке обрабатывает список.
хз, мне кажется 2 шаблона это что-то похожее как и 2 режима) ну и шаблон покупать будут на зеннобокс это + комиссия (2$ немного конечно, но как-то шаблон целый выделять под парсинг 1 страницы) просто интересно можно ли это как-то в коде прописать чтоб было все красиво в 1 режиме и 1 шаблоне)
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
если будете покупать, зачем вы паритесь по этому поводу ? просто описываете свои желания в тз , а исполнитель будет решать что да как. все это реализуемо в рамках одного шаблона.
 

Onizuka

Client
Регистрация
04.09.2019
Сообщения
54
Благодарностей
27
Баллы
18
может типа как-то возможно прописать, если поток запущен не первый, то делаем паузу к примеру перед началом работы потока 2 минуты) и соответственно если поток запущен первым, то выполнить парсинг 1 страницы
 

Onizuka

Client
Регистрация
04.09.2019
Сообщения
54
Благодарностей
27
Баллы
18
если будете покупать, зачем вы паритесь по этому поводу ? просто описываете свои желания в тз , а исполнитель будет решать что да как. все это реализуемо в рамках одного шаблона.
я продавать буду, а не покупать )
 

Onizuka

Client
Регистрация
04.09.2019
Сообщения
54
Благодарностей
27
Баллы
18
еще думал как вариант использовать глобальную переменную, но слышал за них только негатив и стремно их юзать, ато будет все работать не так и не поймешь
 

Onizuka

Client
Регистрация
04.09.2019
Сообщения
54
Благодарностей
27
Баллы
18

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
я продавать буду, а не покупать )
упс *HAHA*

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

Old

Client
Регистрация
24.01.2018
Сообщения
176
Благодарностей
87
Баллы
28
Onizuka, зачем ты себе проблему создаешь?
В зенке проще всего сделать или двумя шаблонами или в одном опционально. А разница только в том, что делая этими способами придется два раза запустить проект вместо одного. Твой клиент навряд ли перетрудится.
 

Onizuka

Client
Регистрация
04.09.2019
Сообщения
54
Благодарностей
27
Баллы
18
Onizuka, зачем ты себе проблему создаешь?
В зенке проще всего сделать или двумя шаблонами или в одном опционально. А разница только в том, что делая этими способами придется два раза запустить проект вместо одного. Твой клиент навряд ли перетрудится.
думал что есть простое, удобное решение в пару строк кода) увы)
 

Supergrok

Client
Регистрация
05.03.2019
Сообщения
171
Благодарностей
156
Баллы
43
Создай список, помести туда 1 строчку, кто первый заберет с удалением, тот и молодец, остальные по красной ветке выйдут на другие кубики в виду отсутствия строки.
Списки сами по себе уже залочены.
 

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