Как оптимальнее организовать асинхронную работу функции



  • Всегда писал скрипты без использования "вызова функции асинхронно", решил переделать один скрипт с использованием этой фичи. Два раза пересмотрел видос уважаемого разработчика на эту тему. Смысл скрипта: берутся из ресурса данные аккаунта, из файла берутся куки, берется юзерагент и из ресурса берется целевой урл и все это дело через параметры функции передается асинхронной функции, которая применяет куки и юзерагент от аккаунта к http клиенту, и в таком залогиненом переходит по урлу, который мы передали из ресурса в параметрах и все. Вот скрин структуры всей:

    Первая траббла которая возникла, это БАС сначала подвис и стал заполнять очередь потоков, пока не кончились урлы в ресурсе, которых было около 100к всего. Кучу памяти забрал, если бы пару лямов я ему таким образом скормил, он бы на моем компе вылетел 100%. Без использования асинхронного вызова функции такая бешенная очередь потоков не создавалась в памяти, а в цикле While урлы брались из ресурса и по мере поступления решались до искончания ресурса. Я попытался сделать вложенный цикл для наполнения очереди потоков асинхронной функции 10к, после чего действие "Ждать завершение асинхронной функции" с параметром "[[THREAD_LIST]]" (как указанно в мануале будет ожидаться завершение всех потоков асинхронной функции), но БАС как будто бы этот флаг игнорирует, и продолжает идти на следующий круг и наполнять очередь потоков по кругу, тогда как потоки еще даже работать не начали, не то чтобы закончили работу.. Понимаю что вопрос нубский, но я всегда обходился без асинхронного вызова, сейчас хочу понять как построить логику, чтобы несколько аккаунтов, каждый со своими параметрами браузера в многопоточном режиме обрабатывали урлы из ресурса используя асинхронный вызов? Возможно ли порциями давать асинхронной функции задания на создание очереди потоков а не весь ресурс целиком, в котором миллионы урлов, пока память не кончится?

    Спасибо за любую подсказку



  • @serrgo Частями отправляйте, цикл For от 1 до N, ожидаете завершения, потом следующую порцию.



  • @smeckoi77

    @serrgo said in Как оптимальнее организовать асинхронную работу функции:

    Я попытался сделать вложенный цикл для наполнения очереди потоков асинхронной функции 10к, после чего действие "Ждать завершение асинхронной функции" с параметром "[[THREAD_LIST]]" (как указанно в мануале будет ожидаться завершение всех потоков асинхронной функции), но БАС как будто бы этот флаг игнорирует, и продолжает идти на следующий круг и наполнять очередь потоков по кругу

    Он как будто игнорирует флаг "ожидать завершения", вот как я делал:



  • @serrgo 10000 не большая ли порция, попробуйте поменьше.



  • Когда вот тут:

    Стояло "wait", то стартовало 25 потоков согласно настройке и все, БАС продолжал жиреть памятью. Я сменил "wait" на "start postponded function" и вроде бы все заработало как надо. Спасибо за внимание, надеюсь что разобрался, если что буду писать)



  • Пытаюсь после ожидания завершения работы потоков вставить очищение списка "[[THREAD_LIST]]", для экономии памяти чтобы он не разрастался. После этого БАС виснет.. После каждой интерации этот список жиреет, и если его не стирать то на каком то миллионе точно вылетит я думаю. Или его очищать не надо?



  • @serrgo а как вы его очищаете?



  • И так и так пробывал



  • @serrgo не понятно почему виснет, попробуйте паузу вставить


Log in to reply
 

  • 7
  • 17
  • 2
  • 4
  • 2
  • 6
  • 8
  • 9