многопоточность в проекте



  • Набросал шаблончик парсер пользователей с заданных групп одноклассников - в один поток работает без сбоев - запускаю в несколько - он не работает - пишет что не найдена перменная - помогите настроить на многопоток и указать что не так - сам не могу осознать - вот архив - в нем шаб и группы для примера
    0_1476753934257_parse_members_ok.rar

    листая и перебирая действия шаба - возник вопрос - если есть функция OnApplicationStart - почему нет функции для завершения скрипта типа TheEndApplicationFinish @support ) ? - ведь если делаешь многопточный скрипт - есть действия которые нужно выполнить один раз в самом конце скрипта когда все потоки отработали

    да кстати @support - вот регулярная ошибка о которой писал в личку - почему то не срабатывает действие ожидания полной загрузки и идет скачек на след действие:
    0_1476754724107_2016-10-18_123705.png



  • @Turutur

    он не работает - пишет что не найдена перменная

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

    Зачем вам OnApplicationStart в этом скрипте?

    листая и перебирая действия шаба - возник вопрос - если есть функция OnApplicationStart - почему нет функции для завершения скрипта типа TheEndApplicationFinish

    Пока не сделал.

    да кстати @support - вот регулярная ошибка о которой писал в личку - почему то не срабатывает действие ожидания полной загрузки и идет скачек на след действие:

    Замените ожидание элемента .x-ph__link_last на ожидание полной загрузки страницы и будет работать.



  • @support said in многопоточность в проекте:

    Замените ожидание элемента .x-ph__link_last на ожидание полной загрузки страницы и будет работать.

    это не связанные действия - это на другом этапе!!! - я же стрелкой обозначил

    @support said in многопоточность в проекте:

    Зачем вам OnApplicationStart в этом скрипте?

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



  • @Turutur

    это не связанные действия - это на другом этапе!!! - я же стрелкой обозначил

    Я просто сказал почему ваш проект не работает. Если не хотите, можете не использовать мой совет.

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

    Настройку потоков можно осуществить выполнив действия в начале работы потока. OnApplicationStart выполняется один раз при старте работы приложения, а не потока.



  • @support said in многопоточность в проекте:

    Я просто сказал почему ваш проект не работает. Если не хотите, можете не использовать мой совет.

    Я очень хочу использовать Ваши советы и так же хочу понять как несвязанное действие может так отражаться - между ними 4 действия - я хочу понять - так как использую эти действия регулярно... - я начал цикл потом действие загрузить - где выставленна опция - ждать полной загрузки, а ожидание элемента .x-ph__link_last - относится к предыдущему действию - или не так?

    @support said in многопоточность в проекте:

    Зачем вам OnApplicationStart в этом скрипте?

    разъясните и такой момент - я на входе хочу почистить файл куда будут результаты писаться - если я ето действие вынесу из OnApplicationStart - то это действие будет выполнять каждый поток - а так как один закончиться раньше чем другой - то данные записанные отработыанным потоком могут быть стерты тем что в работе???
    0_1476758478100_2016-10-18_133834.png



  • @Turutur Скорее БАС рапортует о загрузке страницы после входа в ок и это воспринимается как загрузка страницы https://ok.ru/[[FIRST_LIST_ELEMENT]]/members, дальше БАС переходит к действию прокрутки и во время него происходит смена страницы. После прокрутки БАС ждет что страница прокручена, но так как страница только была создана, этого не происходит.



  • @Turutur Очитску файла как раз можно размещать в OnApplicationStart



  • @support - спасибо - понял - воспользовался подсказками - на старте в онапликатион оставил получение пути и пустую запись в файл - все остальное вынес в общий поток действий - теперь запуская 3 потока - имею 3 совершенно одинаковых потока - которые парсят данные с одних и тех же групп - то есть просто поток в 3 дубля - а меня интересует скорость - что опять то нетак(((



  • @support said in многопоточность в проекте:

    @Turutur Очитску файла как раз можно размещать в OnApplicationStart

    а такие действия как "читать файл в список" - если вынести из онапликатионстарт - будут все потоки делать одно и то же?



  • @Turutur сделай в онаплстарт ресур в список, но создай для этого глобальную переменную, а уже в самом скрипте сделай что бы каждый поток после использования удалл строку из списка, и на всякий случай сделай запуск потоков через определенное время, друг за другом, тут была тема о том как это сделать. Тогда у тебя потоки не будут брать одинаковую строку



  • @DrPrime said in многопоточность в проекте:

    сделай в онаплстарт ресур в список, но создай для этого глобальную переменную

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

    [14:05:15] Поток №1 : ReferenceError: Can't find variable: VAR_SCAN_RESULT_LIST_LOC Номер строки:2 Во время выполнения скрипта { var val = JSON.stringify(VAR_SCAN_RESULT_LIST_LOC); PSet("basglobal", "SCAN_RESULT_LIST", val) section_end(function(){ })}



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



  • @DrPrime said in многопоточность в проекте:

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

    нашел эту тему - там чтобы такое проделать - нужно иметь мозг как у админа) - хотелось бы чтобы BAS сам четко отрабатывал и не брал одинаковые строки при тех условиях что стоит удалять строку после взятия...



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



  • Столкнулся с аналогичной проблемой,
    суть в следующем:
    1)Парсим прокси в онапликейшнстарт
    2)создаем глобальную переменную
    3)грузим в нее список ключей
    4)парсим выдачу гугла при условии что на каждый поток отдельный прокси

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



  • @DrPrime суть скрипта в сборе последних вступивших участников в группы ок по целевым запросам



  • @Turutur

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

    Так а что не получается?

    1)Парсим прокси в онапликейшнстарт

    Можете создать ресурс, записать туда прокси, а потом использовать его как обычный ресурс в потоках



  • @support а не получается запускать несколько потоков - вернее получается - только все потоки обрабатывают одинаковые данные и прокси здесь ни причем - планирую использовать всего несколько аккаунтов для ускорения процесс - проверка на 3 аках - все норм со стороны ОК РУ - только BAS берет одинаковые данные с файла - соответтвенно скорость выполнения не увеличивается(



  • @Turutur

    только BAS берет одинаковые данные с файла

    Хотелось бы увидеть настройки ресурса с файлом, а в идеале весь проект.



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


Log in to reply