Многопоточность | Проект в проекте



  • Здравствуйте. Очень нужна помощь разработчика или Users, кто уже конкретно в теме. Нужен алгоритм создания шаба.
    ТЗ такое - делаю парсер выдачи сразу нескольких поисковиков 4 поисковика
    парсится выдача страниц за 24 часа по 5ти ключевым фразам - это в среднем 3-7 страниц - возьмем для примера 5 - а это 4Х5Х5=100 страниц на выдаче - 1000 адресов сайтов - пусть даже минус повторы - пусть это даже 100 сайтов для обработки и анализа. Дальше идет переход на по спаршеной ссылке сайтов и сбор всех ссылок с главной и ссылок с адрес сайта/sitemap.xml и сбор данных регуляркой с сохранением в файл..

    Вопрос - как реализовать работу шаблона - чтобы он запускался в многопотоке - сразу по 4ем поисковикам с ипользованием сразу 5ти поисковых враз - то есть сразу запускалось 20 потоков, а после сбора страниц допустим в 50 потоков - возможно ли такое вообще реализовать - и если да то в каком направлении двигаться - если нет - то как бы проще реализовать - Заморочка вся в скорости обработки больших массивов данных.

    Да, и что это можно реализовать подключив внешний ресурсы один из которых сожержит 4 строки с сылкой на поисковики и второй содержащий поисковые запросы - это понятно - непонятно, как например использовать и какой тип ресурса, чтобы не подключать внешние текстовые файлы с данными с которых будет с удалением браться строки - а чтобы эти данные хранились внутри проекта - в переменной(ых) или что-то подобное...



  • @Turutur
    Варианты следующие:

    1. Делаешь парсер для каждого поисковика - потом в этом же скрипте парсер сайта.
      На выходе получаешь - допустим у тебя 5 запросов, запускаем 5 потоков под каждый запрос. Каждый поток получает из выдачи 50-70 сайтов, и сразу же потом парсит эти сайты.
    2. Отдельно парсеры для каждого поисковика, отдельно парсер сайтов. Плюс в том что в парсере сайтов сможешь задать больше потоков.
    3. Самый сложный, но правильный. Все в одном. В одном скрипте все поисковики разделены по функциям, в каждом потоке работает своя функция(поисковик) с каждым запросом (как ты и хотел). Но реализовать тяжело, нужно правильно настроить ресурсы что бы каждый поток использовал свою функцию, а каждая функция - нужные запросы.
      И отдельной функцией в этом же скрипте парсер сайтов


  • @DrPrime Спасибо Бля.. блин вот я заморочился - короче понял - это проблема моего больного воображения) - просто всегда хочется сделать мощный шаб и чтобы был в полной сборке - без запуска дополнительных шаблонов - а то начинается потом инструкции делать, что и как работает- потом сам путаешься)



  • @Turutur сделай сначала для каждого отдельно, прощупай программу, а потом обьедени в один комбайн



  • @DrPrime спасибо за участие - просто захотелось немного пофантазировать



  • парсить с помощью запросов, тогда можно и сразу по 5 поисковикам. Либо сделать несколько вкладок и в цикле сделать так, чтобы в каждой вкладке было что то своё. Но не знаю, может ли BAS работать с каждой вкладкой отдельно.



  • @Cruzel said in Многопоточность | Проект в проекте:

    парсить с помощью запросов, тогда можно и сразу по 5 поисковикам.

    Можно подробнее - это как? с помощью запросов?

    С вкладками не получиться - выполнение скрипта идет линейно - можно функции настроить и переменные - но там венигрет получается такой, что путаться начинаешь


  • administrators

    @Turutur Вашу задумку можно легко реализовать с помощью такого скрипта.

    parsesites.xml

    Описание
    В начале работы приложения(функция OnApplicationStart) создаем ресурс, туда записываем поисковые движки.
    Еще один ресурс создаем для сайтов.

    Алгоритм работы потока такой - если в первом ресурсе еще остались поисковые движки работаем с ними, если нет - работаем с сайтами.
    Для удобства можно разбить работу с поисковыми ресурсами и сайтами на 2 функции.



  • @support спасибо огромное - буду пробовать - не перестаю восхищаться вашим творением!


  • administrators

    @Turutur Пожалуйста



  • @support пожалуйста сделайте еще один пример проекта в проекте - пример, который был предоставлен Выше скорее всего не применим.

    Здесь же кстати небольшая просьба - функция OnnAplicationStart - сделайте ее отображение среди прочих функций и действий скрипта - так как она идет первой по умолчанию и вызывать ее не нужно - пусть отображается, чтобы ее было видно. И не совсем понятно как именно она работает.

    • с неее начинается скрипт и она срабатывает первой всегда в независимости от места ее создания?
    • если используется несколько потоков - то она срабатывает только в одном потоке?

    Дайте пожалуйста развернутый ответ, возможно с примерами где и как может использоваться.

    И так к теме - нужна помощь в алгоритме создания следующего шаблона -
    например скрипт будет работать в 10 потоков - задача такая - на входе есть 10 аккаунтов -
    вначале идет парсинг строки с аккаунтом - авторизация и сбор данных - а уже затем подключаются все имеющиеся аккаунты для обработки данных -

    как такое реализовать?


  • administrators

    @Turutur

    с неее начинается скрипт и она срабатывает первой всегда в независимости от места ее создания?

    Да, и ее не нужно вызывать.

    если используется несколько потоков - то она срабатывает только в одном потоке?

    Да.

    Дайте пожалуйста развернутый ответ, возможно с примерами где и как может использоваться.

    Создать ресурс, инициализировать глобальные переменные, очистить папки с временными данными, другими словами сделать все то, что нужно делать только один раз и только в начале работы приложения.

    как такое реализовать?

    Тоже самое, что в примере выше. Только вместо сайтов - аккаунты и сайты не заполняются вручную в OnAplicationStart а берутся из файла.

    Еще раз повторю алгоритм.
    Есть 2 функции - для обработки аккаунтов и для обработки данных полученных первой функцией.

    Если ресурс аккаунты не пуст - вызывается первая функция.
    Если ресурс аккаунты пуст - вызывается вторая функция.



  • @support вот подошел к концу второй день - как я пытался переварить информацию которую Вы дали - создать скрипт с одним акком не возникает проблем - но сделать проект в проекте не получается никак - не смог понять предоставленный алгоритм - что-то не срастается - проект не выкладываю и не прошу готовый - так как реально хочу научиться и разобраться! Попробую более детально расписать.
    делаю приглашалку в группы одноклассников

    входные - есть список аккаунтов
    ссылка на группу куда будем приглашать
    ключевая фраза для поиска групп доноров

    OnApplicationStart[[алгоритм: парсим первый аккаунт - авторизуемся - проверяем авторизацию - вводим ключ в поиск - выставляем выдачу - группы - открытые - искать по тегам - прокрутка 3 раза - парсим группы на выдаче в список]]

    <!-- с этого должен начинать работу скрипт - в один поток, по завершении этой функции - начинается сбор данных - в максимальное количество потоков -->

    Далее идет обработка и сбор данных - хочу сделать так - парсим строку с аккаунтом - авторизуемся - проверяем авторизацию - берем строку из списка с группами - переходим на страницу пользователей - прокуручиваем 3 раза - парсим пользователей - добавляем в список all_members - по завершению удаляем дубликаты - берем первого пользователя - переходим на страницу - приглашаем в группу.

    В один поток все реально нормально работает - как сделать так, чтобы после того какотработала функция OnApplicationStart - то есть одним аккаунтом был получен список групп доноров - чтобы скрипт начинал работать в максимальное количество потоков равное количеству имеющихся аккаунтов в файле????

    Как это сделать??? Люди - кто в теме - у кого что было похожее? Гениев типа "можно выполнить код" - просьба не тратить время - ищу способ выполнения стандартными методами BAS. То есть в начале один поток - потом по максимуму!



  • @Turutur могу толькл прежположить, но попробуй в конце выполнения первой функции создать глобальную переменную, и задать ей какое то значение, а уже в начале скрипта поставь цикл forreach, который будет работать до тех пор, пока переменная не будет равна заданному параметру. Получается так, ты запускаешь n-ое количество потоков, но по факту они все сначала будут ждать пока первая функция закончит свою работу, а только потом начнут выполнять заданный далее скрипт. По поводу количества по ов, как ни крути, нужно будет выставлять вручную.



  • @DrPrime - ) спасибо - не сосвсем понял - но буду разбираться - я немогу понять как сделать переход именно на многопоток - так как я использую файл с аккаунтами для авторизауции и OnApplicationStart для старта и сбора, но когда в начале срабатывает OnApplicationStart - он содержит действие авторизации - соответственно - после можно сделать выход - или использовать разные аки для 1 для сбора - а остальные для обработки - но используя действие парсить строку и авторизоваться после OnApplicationStart - в многопотоке не выходит - все равно один поток работает и минус 1 аккаунт - то же не хотелось бы). Плохо, что в BAS нет возможности визуально строить скрипт как в Зенке - простым перетягиванием нужных блоков и действий


  • administrators

    @Turutur

    В OnApplicationStart можно создать ресурс и обрабатывать его многопоточно, как в примере выше.


Log in to reply
 

Looks like your connection to Bablosoft was lost, please wait while we try to reconnect.