изучить набор стандартных функций. Зачастую даже с большим опытом нужно изучать, набор блоков и стандартных функций постоянно расширяется
Как оптимальнее организовать асинхронную работу функции
-
Всегда писал скрипты без использования "вызова функции асинхронно", решил переделать один скрипт с использованием этой фичи. Два раза пересмотрел видос уважаемого разработчика на эту тему. Смысл скрипта: берутся из ресурса данные аккаунта, из файла берутся куки, берется юзерагент и из ресурса берется целевой урл и все это дело через параметры функции передается асинхронной функции, которая применяет куки и юзерагент от аккаунта к http клиенту, и в таком залогиненом переходит по урлу, который мы передали из ресурса в параметрах и все. Вот скрин структуры всей:
Первая траббла которая возникла, это БАС сначала подвис и стал заполнять очередь потоков, пока не кончились урлы в ресурсе, которых было около 100к всего. Кучу памяти забрал, если бы пару лямов я ему таким образом скормил, он бы на моем компе вылетел 100%. Без использования асинхронного вызова функции такая бешенная очередь потоков не создавалась в памяти, а в цикле While урлы брались из ресурса и по мере поступления решались до искончания ресурса. Я попытался сделать вложенный цикл для наполнения очереди потоков асинхронной функции 10к, после чего действие "Ждать завершение асинхронной функции" с параметром "[[THREAD_LIST]]" (как указанно в мануале будет ожидаться завершение всех потоков асинхронной функции), но БАС как будто бы этот флаг игнорирует, и продолжает идти на следующий круг и наполнять очередь потоков по кругу, тогда как потоки еще даже работать не начали, не то чтобы закончили работу.. Понимаю что вопрос нубский, но я всегда обходился без асинхронного вызова, сейчас хочу понять как построить логику, чтобы несколько аккаунтов, каждый со своими параметрами браузера в многопоточном режиме обрабатывали урлы из ресурса используя асинхронный вызов? Возможно ли порциями давать асинхронной функции задания на создание очереди потоков а не весь ресурс целиком, в котором миллионы урлов, пока память не кончится?
Спасибо за любую подсказку
-
@serrgo said in Как оптимальнее организовать асинхронную работу функции:
Я попытался сделать вложенный цикл для наполнения очереди потоков асинхронной функции 10к, после чего действие "Ждать завершение асинхронной функции" с параметром "[[THREAD_LIST]]" (как указанно в мануале будет ожидаться завершение всех потоков асинхронной функции), но БАС как будто бы этот флаг игнорирует, и продолжает идти на следующий круг и наполнять очередь потоков по кругу
Он как будто игнорирует флаг "ожидать завершения", вот как я делал:
-
Когда вот тут:
Стояло "wait", то стартовало 25 потоков согласно настройке и все, БАС продолжал жиреть памятью. Я сменил "wait" на "start postponded function" и вроде бы все заработало как надо. Спасибо за внимание, надеюсь что разобрался, если что буду писать)
-
Пытаюсь после ожидания завершения работы потоков вставить очищение списка "[[THREAD_LIST]]", для экономии памяти чтобы он не разрастался. После этого БАС виснет.. После каждой интерации этот список жиреет, и если его не стирать то на каком то миллионе точно вылетит я думаю. Или его очищать не надо?