Смотреть видео: Асинхронный вызов функций в BAS. Улучшенная многопоточность.


637 просмотров.

Краткое описание видео: .приветствую в этом видео мы посмотрим на.асинхронный вызов функции новое.изменение которое стало доступно начиная.с версии вас 22.5 используя данный.функционал вы сможете реализовать самые.сложные сценарии многопоточной работы.причем этот метод выиграть у старых.вариантов реализации многопоточности как.по простоте использования.так и по функциональным возможностям и.по оптимизации структура видео такого.настя например этим сложно но поточный.парсер многопоточный это изменение.займет всего.имеющий минут посмотрите по сложностью.башня понимается то что он работает.несколько стадий.они сложность парсинга страницы или.какие-то особые спектры то есть подобные.скрипта не превратить из 1 поточного.многопоточный с помощью измене числа.потоков той с помощью стандартного.метода.а вы с помощью вызова синдроме хэйсэй.можно ее легко.всего пару изменений и скрип начнет.работать десятки раз быстрее далее мы.перейдем к обзору возможности нового.модуля будем разбирать их на небольших.примеров они помогут объяснить почему и.как работает пример показанные выше.примеры отсортированы в порядке от самых.важных умений значительным именно.поэтому если вы на каком то этапе решите.рыбачит видео то это нормально новому.устроен так что в нем можно разобраться.интуитивной и вам не обязательно.смотреть все видео и так давайте начнем.давайте теперь посмотрим какой скриптом.были модифицировать этот скрипт.сохранять картинки за 100 грамм по.заданным тедом посмотрим на то пути.действий к теплицы используется в данном.скрипте.для начала создаем тобою переменными.тегов президент запятой.далее преобразуем это в настоящем списан.с помощью действия машин страху-то мир.для каждого элемента данного списка.вызовов лучше пар стоит вот оно что.здесь происходит загружается вот эта.страница с тегом потом по заднему.селектору получается все изображения все.нужны нам изображения для каждого.пожирала секвенция при минус атаки будут.и вызывается в помощь с этим с этим.миром она работает очень просто картинка.сохраняется вот в эту папку сейчас она.пустая с рандомный у меня посмотрим как.работают на практике вот мы получаем 1.дек.загружаем стримить и получаем все ural.каждой картинке и для первой картинке.вызываю функцию которые сохраняют ее в.пробку теперь давайте посмотрим как.работает режиме запуска принципе то.скрипт рабочий и все хорошо но как я уже.говорил есть одна проблема работает.однопоточный и поэтому достаточно.медленный если количество тегов будет.велик он то ждать придется долго поэтому.нужно его модифицировать и и мы это.будем делать с помощью.новому для синхронного закрытие здесь мы.будем изменять все вызова функции.стандартные на вызов конце синхронно и.при этом естественно.имена функция должна совпадать здесь мы.заменяем паштет на посты и.также должны совпадать параметр.из первых один параметр форме дартом.старый вызов конечно же нужно удалить.если вы пока не понимаете как это.работает и почему это вообще работает то.это будет объясняться дальше в этом.видео пока только демонстрация теперь.здесь нас здесь кажется.с это 3 пункта давайте сверим то мне.кажется все правильно параметры.совпадают и теперь посмотрим как будет.работать новом варианте key card trick.сока и видите браузеров здесь создается.несколько.и вся работа идет параллельно скрипт.будет работать если мы вернемся в.окончания то увидим что он кадре.корректно завершается когда закончится.последняя задача последний требует.работает скрипт завершится а теперь.давайте посмотрим почему это работает.давайте все таки разберемся что такое.сохранится для этого для того чтобы.лучше понять это представьте себе такой.пример допустим у вас есть схема.и может отключиться что моменты фильмы.работаете один и тогда вы всю работу вы.понравится самостоятельно соответственно.если вам нужно выполнить эту задачу.уилер.начинаете делать и вы уже не можете.выполнять вторую задачу пока не.закончите первые когда вы закончили.первые вы можете уже в игре чем.заниматься допустим 2 задачи или чем-то.другим и ситуация меняется когда у вас.подчинении находится несколько.работников тогда вы можете попросить.кого то из них нет того чтобы видео.самостоятельно кого-то из них попросить.сделать их учащимся вас и тогда после.того как его попросили вы сразу встречу.свободным это задачи выполняет уже он.можете заниматься еще чем-нибудь.допустим сказать еще комната рабочему.сделать какую-то вторую задачу.это налога на будет очень часто.встречаться в этом видео и вы здесь.можно провести параллель между обычной.вызовом функции этой ситуации вода вы на.фирме один сами все выполняется и между.тем смещаем куда у вас есть какой-то.персонал и тем что функции вызываются.асинхронно и отсюда вытекает первое.правило что если функция вызывается.синхронно то действие которое вызывать.основных миссий.она возвращается немедленно мгновенно.она жива память секретов о нет где мы.чуть проще будем разбираться но давайте.посмотрим как это все будет на примере у.нас есть такая чем красить и скрипты.вызывая синхронно функции google search.но савощенко страхуется которая из.ссылки из запроса.получают список ссылок и задачи google.все очень просто завершается список.перед этим блока записывается как.записываться результаты естественно что.эта функция не будет работать мгновенно.не понадобится некоторое время и вот.согласно потому что этот трюк.все первые три действия они выполнятся.мгновенно давайте посмотрим как это.работать нажимаем на запуск и ведь атаки.и что первый поток.запускает второй поток началась вниз и.точнее обрезалась наклонов менса он.происходит мгновенно потому где-то потом.происходит ее выполнение и.соответственно вывод результат то есть.сразу после этого поток номера.освобождаются и может делать цену что.ему захочется но окей а что если мы.хотим получить результат выполнения.теста мы запускаем француз названием.дугласа ощущаю видно что мы хотим.получить список ссылок они просто не.поместится и для этого нам понадобится.две вещи 1 танк 3д.это идентификатор потока то есть то что.помогает решить какой результат какой.именно функции мы хотим получить.и второе это действие получить результат.и синхронных лица его будем использовать.этот раз она требует иди потолках мы.берем того что вызов функция синхронно и.здесь помимо самого инвентора то есть.еще несколько возвращаемых значений.прервать работает для функция строили.зультаты выполнения.прекратили он успешным быстро посыпкой.последние два могу потрогать не будем.1 2 просто ведем блог давайте быстренько.сделал первое это видим она хочет.применить разрезал и второе мы видим.статус.это значение находится переменную как.без роду и посмотрим что будет.а тут же видеоблога мы вызвали.вызвали это действие очень рано и еще.результат не был получен в таком случае.переменная результатом уплачено зовут не.плачь или ну а столкнуть получили что за.че еще выполняются пройти попробуем.исправить наш скрипт и запустить функцию.получения дэн доктора немного попозже мы.не допустим через 10 секунд.то есть проводя аналогии с фирмой не.начальником вызов этого действия это.равносильно тому что начали спрашивать.почтенного от люка на задачу выполнил то.какой был результат и мы видим что вас.первом потоке уже тогда при действии.завершилась мы получаем результат и.статус выполнения меняется на false.давайте чтоб было супер понятны и.наглядны и я сделаю еще цикл.котором мы будем спрашивать.периодически о статусе выполнению задач.у м10 расспрашивать 27 сто раз неважно и.будем это делать через каждый.через каждые секунд то есть это у нас.получается такой на двери военачальник.которые каждую секунду подходите.спрашивают а вы готовы.готовы ли задачи и если сначала мы.получаем ответную сдачи еще выполняется.и результат molto когда она по факту же.сделано статус меняется на то что задача.закончена и мы получаем фактически.я добавил еще двух переменных это.отрядов секс с на небе в этой переменной.a chemist информацию о том была ли.выполнение сотрудниц успешно нет литра.дыра rad des trois информация об ошибке.если она была и на самом деле такая вот.конструкция с циклом она не является.очень красивый хотелось бы лена что-то.заменить.для этого есть 10 ждать завершения.сохранится на самом деле на планету.очистки точно то же самое что то есть.это цикл в котором ожидается пока не.будет получен какой-то результат.либо он был положительным любого наглеца.росмэн это действие будет работать пока.закроем функция не закончится сугробе.сенсор которая задана айди потока.используем переменную опять точно также.как для получения результата и теперь.можем справиться этого цикла я ставлю.только получения результата и давайте.попробуем запустить.обратите внимание что получения.результата не называется пока не будет.закончена.ткани будет сплошной синхронных лица это.потому что перед толщину результата.стоит ожидания соответственно переменный.шел еще выполняется вы значение false и.что закончил свою работу и она выполнена.успешно.давайте рассмотрим еще один важный.параметр который есть в действие.ожидания это максимальное время ожидания.по умолчанию она бесконечная то есть.функция будет ожидать которых действия.будут ожидать сохранной функции столько.сколько это необходимо ну давайте.поставим значение которое за время.которого точно функция не успел.уклониться и посмотрим что будет.здесь у нас первый поток.завершаются с ошибкой приобрести и.обратите внимание что достижение.тайм-аута.она также закрываясь второй поток такая.вот конструкция с этим параметрам она с.максимальным временем выполнение она.очень удобно когда нужно задать какой-то.одной или несколькими синхронным.функциям максимально елена и выполнения.чтобы делать примеру совсем красиво мы.можем игнорировать ошибки.чтобы не получать из крещение во время.для первого потока и посмотреть что.будет ждать здесь тонами пригодится.сообщение об ошибке и вот это перемена.3d секс с так секундочку нет ошибку.номера еще раз.и здесь видим что первый поток не.завершился не было никакой ошибки но вот.у второго потока она была и мы можем.получили на статус с помощью переменной.3d секс с и сообщение об ошибке также.присутствовать от принтер мы perfomax.own интересным особенностям асинхронной.функции давайте я подумаю что будет если.удалить все действия по ожиданиям.проникнуться получение результата.бесконечного сна в конце и оставить.только ее вызов основном потоке что.тогда будет как мы знаем вызов он.закачивается мгновенно и получается что.на блок естественно тоже за качество.мгновенно и получается что основной.поток то чем завершится мгновенно ну.тогда по идее получающий вызова.синхронных умса должен плеваться и поиск.не должен быть осуществлён давайте.проверим то ответа.мы уже видим что это не та браузер.работает.завершается первый поток но встретите по.ткани цветок и здесь мы подходим к.кострому правило это то что скрипт будет.ожидать пока.абсолютно все сохранной функции не.будете мужчины именно этим программам мы.пользовались тогда модифицирование.скрипт для инстаграма.мы запускали новая синхронно функцию.основной поток завершался.и они работали уже где-то фоне оба сам.разбирался.когда вся работа которое ему назначили.когда она будет завершена и только тогда.завершал скрип и ни в коем случае не.кровавым какой страницу преждевременно.давайте попробуем запустить несколько.асинхронных меньшевики соответственно.несколько потоков если первыми мы искали.котел кто вы во втором давать искать.клад посмотрим что произойдет сейчас.видите запускается два потока.первый щит который собак первый поток.сразу не завершается.потом завершается второй поток и только.завершатся крите поток ты из последняя.цифра на пенсию согласно этому правилу.завершаются где скрипт а теперь давайте.поэкспериментировала подумаем что.гусеницы сразу большое количество.потоков допустим сразу тысячу.они колбасу падет не сутки тысячу.потоков.но нет.нагрузка действительно большая браузер и.выпускаются один за другим но в данном.случае могу сказать сразу что у вас.ограничивать количество потоков.количество одновременно запускаемых то.есть надо бы точно сохраняется но.количество поток ошибки.а причина и что самое важное все задачи.которые не попали вот в это ограничение.они попадают в очередь и будут.выполняться впоследствии таким образом.мы все-таки получим тысячу.вызвав унции получим 1000 результатов но.мы не будем дожидаться результата этого.остановим и посмотрим на то как можно.изменить настройку масштаб.из потоков дальнейшем удерживать.а эта настройка на сдается вот с помощью.этой переменной максимальное количество.синхронно функции выполняемых.одновременно.давайте изменим это значением ну скажем.на 5 и попробуем запустить еще раз.сейчас интерфейсу должно быть намного.проще справляться.нас всего пять браузеров все они будут.работать параллельно и.количеством выполнение должно равняться.но здесь еще одна проблема.видите что у браузеры данной реализации.они перри создаются и у нас есть еще.одна настройка чтобы этого избежать.можем сказать бас что окей можно.выпускать.потока которые уже уже созданы не.закрывать их не перри закрывать перри.открывать работать прямо в них это.значительно должно увеличить.быстродействия делать это можно с.помощью вот эти настройки.поведение развеяны бездействия поток.грубо говоря несколько поток.бездействует то по умолчанию его закрыла.и начинаем новый поток.если же установлен опцию старт останется.здесь вот есть и в описании то новые.функции будут выполняться прямо в тех же.поток и соответственно с теми же.браузерами.и с помощью вот двух этих настроек.мы сделали довольно сильно.оптимизированный на скрипке здесь.происходит поиск.один за другим мы получаем результаты но.браузер не перри создаются им системе а.гораздо легче справиться с такой.нагрузкой.давайте теперь модифицируем noscript.будем не просто оставить одни и те же.запросы выполняют тысячи раз а будем.выполнять список запросов.список возьмем из прошлого скрипта я.инстаграму это просто будет список т.д..опять же мы просто не руки ничего.особенного и вместо функции пар степман.вызываете функцию google search.за счет механизма синхронно функций вас.будет самостоятельно вызывать потомки.самостоятельно будет поскреб закончится.и благодаря вот этим настройкам.будет следить за тем чтобы потоком было.не больше пяти.и чтобы функции и чтобы браузер и не при.создавать чтобы работа шла в одних и тех.же браузеров давайте попробую запустить.этот раз дождёмся результата и.убедимся в том что скрипт.возвращаются корректней.да здесь нужно было изменить параметр.функции поскольку он остался у нас равен.константе давайте быстренько это сделаем.так ли что-то старое значение утра и.снова запускаем теперь должна работать.нормально.и видим нас уже реально выдача по разным.запросам браузер убираются когда они уже.не нужно когда ненужным когда нет новых.задач и в итоге мы получили те.результаты которые хотели но дело в том.что мы сейчас результаты получаем форме.я сообщения в лоб вот здесь но что если.мы хотим их как-то обработает то есть мы.хотим их получить для этого раньше мы.использовали действия ждать завершения.синхронной функции и получить результат.и синхронных но раньше у нас был всего.один поток и всего одна асинхронно.синица так вот дело в том что мы можем.использовать.ожидания и для списка потоков не только.для одного потока и.как раз одно из удобств которые.предлагают асинхронных улице это то что.это действие не только возвращают иди.потоков переменную новый записывает его.в специальный список и по мере того как.новой асинхронная функция запускается.этот список пополняется мы прямо можем.использовать эта перемена трек-лист.для того чтобы для того чтобы.представить и этот параметр действие.рождает завещание сохранной функции и.после вот этого вызова мы можем быть.уверены что все результаты что все.синхронные функции завершены.все из этого списка все которые.запускались другими словами и далее.будем использовать действие on for each.чтобы обойти этот список напомню что его.элемент это просто идентификаторы.запущенные потоков и.чтобы получать данные.мы не будем вводить каких-то.дополнительных сведений поскольку уже.порядка что поток завершил работу мы.просто будем вводить результаты.ещё один важный момент нам необходимо.выбрать данную оптимизацию поскольку.если.функции называются в одном и том же.потоке по старым контакты будут.перезаписаны новыми и мы получим только.пятерку последних результатах.давайте посмотрим как это все будет.работать.в потоков который запускается.дополнительного сержанта ты но они нас.не интересуют нас интересует именно.результат в первом потоке как видите он.еще работают не было совершить сообщение.что опытом завершился.как видим после завершения.все результаты конкретно корректного.записали слов теперь давайте поговорим.про ограничение сафронов миксы.ну первое можно самое очевидное за то.что основная функция в режиме записи или.себя немного не так как режиме запуском.ну это и понятно потому что режим записи.по умолчанию 1 поточнее а асинхронные.функции они по умолчанию призывают.ubuntu многопоточном режиме тем не менее.возможность отладки сохраняться.дело в том что в режиме записи.вызов асинхронные функции практически.идентичен не забыл об обычных давайте.покажу как это работает я меньшего.количества.поисковых запросов которые будем.осуществлять.и будет всего 2 и вот видите когда мы.запускаем функция синхронно black.начинаем отлаживать эту чтобы произошла.в режиме запуска мы бы мгновенно.переместились на следующие действия.давайте быстренько пройдем все эти этапы.поиску.еще один поисковый запрос.но как видите остальная piano.остальные действия не работают более.менее корректно так ждать совершении.синхронно странице завершилась мгновенно.потому что обе.запущены функции нас уже выполнить.кстати поскольку убежден записи то мы.можем посмотреть список потоков вот он у.нас такой то есть на запускалась два.потока потому что у нас есть c2.поисковых запросов и соответственно в.списке приобрести у модели перемен и.когда мы делаем по ним цикл получают.корректные результаты то есть вывод то.что окажусь таки можно но некоторые.свойства.силу 1 по точности они теряются и также.не нужно забывать что асинхронная.функция выполняется абсолютно в другом.потоке и в этом потоке уже не будут.видны локальные переменные из того.потока которых и за их запустил в новом.потоке не будет того контекста браузера.то есть если вы залогинились на каком-то.сайте и запустили асинхронная функция.после этого того не следует ожидать что.ваш авторизация.она будет работать уже в новом потоке но.если так подумать это тоже вполне.логично ведь если снится к аналогии с.фирмой.и начальником это правильно то что у.подчиненного там где выполняется.синхронно снится что упрощенного нет.информации.той которые есть у начальника то есть.нужно понимать что это отдельная.сущность отдельный поток и там абсолютно.все отдельная и то как вы можете.обмениваться информацией между циклами.мизинцами тем контекстом откуда они.запущены это параметры функции мы давно.это уже делаем потому что вот есть один.параметр string это один продукт.эти простынка не передается поисковый.запрос также есть возвращение.возвращаемое значение это список.естественно работает и стандартные.методы обмен информации то глобальные.перемены и ресурсы.но все-таки именно для синхронить и.рекомендуется использовать параметры и.возвращаемые значения.давайте рассмотрим ещё одно особенности.синхронно функции это возможность запуск.нескольких функций в одном потоке к.мясным запас происходит последовательно.они параллельно что я имею ввиду ну.допустим у нас есть две.inside прокси и 1 останавливает прокси.для браузеров проплывающая текущая и.браузера если запустить в разных потока.to a proxy не будет применяться прозр.при получении пик а вот если их.запустить.последовательного нам как-то приз.началась обсе потом чepнopyк то проверка.я пиву пресс не через прокси.соответственно будет толщины нотация и.клип рапси.также данный метод может быть.использован для того чтобы делать такие.вот настройки надстройки либо задавать.либо сдавать настройки браузера перед.основная функция это пустим перед.поиском google.же опять же вызвать кусака обсе которого.станут.установить прокси для браузера давайте.посмотрим как можно существительным.трубам.propsim и здесь продвинутых настройках.нам нужно изменить параметры остановить.поток после завершения функции.потому что по умолчанию поток удаляются.по стойкости кроме функция вызваны о нем.завершена.нам нужности увидеть это значение falls.теперь добавим сон чтобы флис успела.выполнится а теперь выполнить учебники.еще один важный параметр даны нам нужно.указать поток в котором функция будет.выполняться.потому что одновременно работающих.потоком может быть мало и бас нужно.знать точно не следует выполнить в.качестве входного параметра используются.и диплодока.это тот же самой индии которую.возвращают который мы уже использовали.для ожидания.работы потока и до получения результатов.просто используем переменную трагедии на.этот раз уже можно остановить поток.после завершения данной функции и.давайте выставим блоги.теперь попробуем запустить наш пример.сейчас создался браузер поскольку для.того чтобы изменить прокси нужно создать.браузер далее мы подождали 5 секунд.далее завершился со мной поток на самом.деле о самом потоке даже вообще нету.браузер и все происходит в.дополнительном потоки которые мы создаём.потом выполнился.выполнилась функция уже ранее созданного.потоки.автором был задан прокси и мы получили.именно это адрес прокси-сервера стране.мы использовали действия спать якобы для.того чтобы выполнение сохранив из и не.накладывалась одно на второе но на самом.деле это не требуется делать дело в том.что если функция какая-то функция уже.выполняется в потоке и другой поток.просят выполнить новую функцию.то это новая функция будет поставлена в.очередь и она будет выполнена только.когда когда.выполните предыдущая причем если в.очереди несколько функций по порядок.сохранится давайте для наглядности я.сделаю так чтобы функция сообщи она.работала не мгновенно а ну скажем пять.секунд для этого отзывают искусственно.время ожидания.5 секунд не забудьте.основной поток уже завершится в.дополнительном потоки выполняется.установка прокси.наша задержка и только после этого.производится проверка и пи адреса.мы снова видим что снова опять газ был.получен от прокси последнее что хотелось.бы сделать это улучшит наш пример для.парсинга google так чтобы он работал.через прокси и мы будем делать это не.изменяя google search.не добавляют и данного входной параметр.galaxy ace пользуемся старую готовых.ресурсы от roxy.причем мы будем несмотря на то что сезон.отнеси здесь 2 мы будем использовать тот.же самый метод для установки прокси.один джермейн и вызовем со такси.асинхронном будем использовать тот же.прокси сервер не останавливаем поток.здесь нам нужно поток наоборот.остановить здесь нужно использовать эти.потолкам в котором был установлен прокси.и чтобы увидеть результат работы давайте.добавим функцию google search взял.функции ч кальпе.просто чтобы мы получили блог то-то и.peace которым был осуществлен запрос на.этот раз на обычной улице.сохранит сюда с новые потоки не покажет.корректно результатом.результаты именно для этого потока и это.всё давайте запустим и посмотрим с каким.айпи осуществляют запрос.как видим был использован айпи сервера и.последнее что на что хочу обратить.внимание это на то что данный скрипт.является довольно таки тяжелым с точки.зрения многопоточности потому что здесь.существует несколько очередей 1 для 1.для парсинга 1 для создания новых.потоков и парсинга нём а вторая для.выполнения.уже старых потоков и это довольно таки.сложно для вас но легко для пользователя

Асинхронный вызов функций в BAS. Улучшенная многопоточность.

Как? Вы еще не смотрели? Ну это зря...