@Fox Привет.Я описывал задачу в этой теме https://community.bablosoft.com/topic/27417/вызов-многопоточной-функции
Дело в том,что я не могу вообще никак перевести свой скрипт на многопоток,у меня тупо,что в вызове функции в многопоток,что просто обычный многопоток,выполняет свою работу с данными по очереди,а не одновременно.И это очень сильно бьет по времени,а нужна именно скорость обработки.Все уже готово и скрипт рабочий полностью,но скорость обработки заставила воспользоваться многопотоком.Ранее,подобных проблем не замечал,а сейчас элементарную задачу не могу уже несколько дней решить.
Скрипт очень простой и работает без браузера вообще,в скрипте используется только одно взаимодействие с гет запросом.Пример скрипта я приложил в этой теме(но без запросов),он точно почти такой же,как и основа.
Логика такова:
1)Запускается скрипт (без всяких ресурсов изначально и данных) и создаются два ресурса.
2)Делается запрос на сайт,который обрабатывается в отдельной функции,т.е. обрабатывает полученные строки и записывает в ресурс.
3)Вызывается функция в несколько потоков,которая работает (должна работать) с каждой строкой из созданного ранее ресурса(уникальной)в отдельном потоке.Данные обрабатываются и записываются во второй ранее созданный ресурс.
4)Как только данные обработаны,ресурс переводится в список и список записывается в файл.Более ничего не делается.
-Сперва я думал,что проблема в создаваемых в ходе работы ресурсах,но нет.Создавал изначально ресурсы и то же самое было.
-Потом пробовал брать из файлов значения\потом создавать файлы по ходу и из них брать данные\сохранять напрямую пытался и.т.д
-Возможно думал стоят какие то ограничения из за слабого пк с 4 гб оперативы и взял сервер с 64 гб,но как обрабатывалась строка за 5 минут на моем пк,так же по скорости и на серваке.Ладно, с этим я уже ничего не поделаю из за регулярок в проекте,согласен.Но вот перевести на поток и хотя бы по 10 строк одновременно обрабатывать,очень бы помогло.А сейчас в любом случае,у меня,сколько бы потоков не выставил - работает все равно как один,просто по очереди разный поток берет свои данные(
многопоточность в проекте
-
Набросал шаблончик парсер пользователей с заданных групп одноклассников - в один поток работает без сбоев - запускаю в несколько - он не работает - пишет что не найдена перменная - помогите настроить на многопоток и указать что не так - сам не могу осознать - вот архив - в нем шаб и группы для примера
0_1476753934257_parse_members_ok.rarлистая и перебирая действия шаба - возник вопрос - если есть функция OnApplicationStart - почему нет функции для завершения скрипта типа TheEndApplicationFinish @support ) ? - ведь если делаешь многопточный скрипт - есть действия которые нужно выполнить один раз в самом конце скрипта когда все потоки отработали
да кстати @support - вот регулярная ошибка о которой писал в личку - почему то не срабатывает действие ожидания полной загрузки и идет скачек на след действие:

-
он не работает - пишет что не найдена перменная
Локальные переменные установленные в OnApplicationStart не будут работать в остальных потоках. Запрет загрузок картинок так же не будет работать, так как в начале работы потока браузер пересоздается.
Зачем вам OnApplicationStart в этом скрипте?
листая и перебирая действия шаба - возник вопрос - если есть функция OnApplicationStart - почему нет функции для завершения скрипта типа TheEndApplicationFinish
Пока не сделал.
да кстати @support - вот регулярная ошибка о которой писал в личку - почему то не срабатывает действие ожидания полной загрузки и идет скачек на след действие:
Замените ожидание элемента .x-ph__link_last на ожидание полной загрузки страницы и будет работать.
-
@support said in многопоточность в проекте:
Замените ожидание элемента .x-ph__link_last на ожидание полной загрузки страницы и будет работать.
это не связанные действия - это на другом этапе!!! - я же стрелкой обозначил
@support said in многопоточность в проекте:
Зачем вам OnApplicationStart в этом скрипте?
вообще тогда не понимаю логики его использования - я думал что данная функция это как настройка для предстоящих потоков
-
это не связанные действия - это на другом этапе!!! - я же стрелкой обозначил
Я просто сказал почему ваш проект не работает. Если не хотите, можете не использовать мой совет.
вообще тогда не понимаю логики его использования - я думал что данная функция это как настройка для предстоящих потоков
Настройку потоков можно осуществить выполнив действия в начале работы потока. OnApplicationStart выполняется один раз при старте работы приложения, а не потока.
-
@support said in многопоточность в проекте:
Я просто сказал почему ваш проект не работает. Если не хотите, можете не использовать мой совет.
Я очень хочу использовать Ваши советы и так же хочу понять как несвязанное действие может так отражаться - между ними 4 действия - я хочу понять - так как использую эти действия регулярно... - я начал цикл потом действие загрузить - где выставленна опция - ждать полной загрузки, а ожидание элемента .x-ph__link_last - относится к предыдущему действию - или не так?
@support said in многопоточность в проекте:
Зачем вам OnApplicationStart в этом скрипте?
разъясните и такой момент - я на входе хочу почистить файл куда будут результаты писаться - если я ето действие вынесу из OnApplicationStart - то это действие будет выполнять каждый поток - а так как один закончиться раньше чем другой - то данные записанные отработыанным потоком могут быть стерты тем что в работе???

-
@Turutur Скорее БАС рапортует о загрузке страницы после входа в ок и это воспринимается как загрузка страницы
https://ok.ru/[[FIRST_LIST_ELEMENT]]/members, дальше БАС переходит к действию прокрутки и во время него происходит смена страницы. После прокрутки БАС ждет что страница прокручена, но так как страница только была создана, этого не происходит. -
@support - спасибо - понял - воспользовался подсказками - на старте в онапликатион оставил получение пути и пустую запись в файл - все остальное вынес в общий поток действий - теперь запуская 3 потока - имею 3 совершенно одинаковых потока - которые парсят данные с одних и тех же групп - то есть просто поток в 3 дубля - а меня интересует скорость - что опять то нетак(((
-
@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 сам четко отрабатывал и не брал одинаковые строки при тех условиях что стоит удалять строку после взятия...
-
Столкнулся с аналогичной проблемой,
суть в следующем:
1)Парсим прокси в онапликейшнстарт
2)создаем глобальную переменную
3)грузим в нее список ключей
4)парсим выдачу гугла при условии что на каждый поток отдельный проксиПри однопоточном варианте все прекрасно работает, если же многопоток то выдает ошибку что не может получить переменную с ключами. Пробовал и глобальную назначать в онапликейшнстарт и файл в список а после список в глобальную переменную и брать элемент из списка с удалением, вообще никак не хочет пахать
-
суть скрипта в сборе последних вступивших участников в группы ок по целевым запросам
Так а что не получается?
1)Парсим прокси в онапликейшнстарт
Можете создать ресурс, записать туда прокси, а потом использовать его как обычный ресурс в потоках
-
@support а не получается запускать несколько потоков - вернее получается - только все потоки обрабатывают одинаковые данные и прокси здесь ни причем - планирую использовать всего несколько аккаунтов для ускорения процесс - проверка на 3 аках - все норм со стороны ОК РУ - только BAS берет одинаковые данные с файла - соответтвенно скорость выполнения не увеличивается(
-
@support - в Ваше отсутствие - я не бросал попыток сделать многопоток самостоятельно - и несколько раз видоизменял проект - добавляя действия в онапликатионстарт, которые необходимо выполнить единожды - такие как список в файл и тому подобное - но перевести их в глобальную переменнцую не удалось( - как впрочем и сделать многопоток - сейчас проект выстроен линейно под один поток - @support пожалуйста покажите на примере моего проекта как его сделать многопоточным - по всем правилам, чтобы небыло пересечений действий в потоках и использования одинаковых ресурсов
0_1477832211837_parse_members_ok.rar