@@danilfighter6179что тебе здесь непонятного?автор почти целый час разжовывал материал,не понял если то заново смотри и вникай,ты тупо на автопилоте посмотрел нихера не понял и клянчишь вторую зачем та часть
десятки комментаторов уже сказали, что это лучший рассказ про асинхронку, но я бы повторил)) очень классно, что не просто бросаются факты в слушателя, а дальше сам разберется, а по каждому вопросу размусоливается до отдельных слов каждый момент, формируется прочное начальное понимание темы и уверенность в знаниях) Как и многие, думаю, пришел с курса Павла Хошева по парсингу, не знаю, как дела обстоят в его курсе по асинхронке, но в случае с парсингом подход был ровно обратный подходу этого видео - никакого углубления что под капотом, вот вам пример парсера и ключевые слова, вперед. В итоге даже две единственные задачи дались с трудом в том модуле и в итоге ноль понимания сложилось, благо, сие видео помогло разобраться, большое спасибо, подписочку оформил))
Потрясающее видео, все в голове встало на свои места. Много было не понятно раньше в особенности await, но после данного ролика асинхронность стала еще одним навыком для меня. Также хотелось бы отметить пример с гроссмейстером , так как поток один, то 1000 корутин не будет работать также быстро как 15 , одним словом ЛАЙК!
37:53 блин как же это в точку. У меня было ровно то что говорит автор, асинхронный телеграм бот а внутри него синхронные библиотеки. Вот прям один в один. Автору видео кстати респект за качественное видео! Это пока лучшее пояснение ассинхронисти в Python которое я видел. Продолжай в том же духе!
Ответ на вопрос 25:18 очень простой. Я его нашел в книге Мэттью Фаулера. Там от пишет, что await запускает очередную итерацию цикла событий, а это зничит, что запускаются ВСЕ ожидающие выполнения задачи. То есть, когда в вашем примере await вы поставили во всех строках сперва запустился цикл с первой задачей (остальные еще не созданы), затем со второй (первая уже выполнена, а третья пока не создана), затем с третьей. Когда await у вас только в последней строке все три задачи запускаются сразу, так как уже находятся в цикле событий. В книге подобный пример не вызывает вопросов, так как там автор сперва явно создает все задачи 'task1=asyncio.create_task(task_one())' а уже потом их ВСЕХ ставит на паузу 'await task1'. В общем, ваше объяснение этого момента немного сбивает с толку. Но все равно спасибо, так как заставили покопаться в этом вопросе и разобраться.
По моему действительно в видео путаница какаято. Сначала про await говорится что это некоторая операция которая ставит выполнение функции на паузу и передаёт управление другим функциям находящимся в цикле событий (19:56) и ждущим своей очереди , а потом внезапно про await говорится что это блокирующая операция и мы должны дождаться пока функция не отработает (25:18).
Указать await three() и gather - это не одно и то же поведение. В этом примере работает одинаково. Но поставь в корутине one() паузу больше, чем в three() - в консоли уже не будет 'stop one', т.к. мы не указали явно, что ждем результата one(). А в случае с gather цикл дождется выполнения всех задач, в консоли будет полный вывод.
Спасибо за контент! При поиске материалов по asyncio сразу нашел твое видео, но из-за непривлекательности заставки пропустил. После продолжительного чтения документации и статей на Хабре, понял, что нет понимания базы. Вернулся к твоему видео и все стало максимально понятно.
ну ты чего -о книге по обложке судишь?))) да и заставку конкретно в 1 этом случае сгенерил ИИ, ты прям обидел нарождающийся скайнет =) По основам - очень хорошо, что понял и начал их осваивать, я сам в свое время забуксовал, потому что начал не с основ, а с синтаксиса, думал все очевидно.
Огромное спасибо! отличное введение в asyncio. И отдельная благодарность за кусочек "из реальной жизни" - про запросы. Как раз пишу себе программку для скачивания сериала с сайта. Там и попробую применить.
Есть замечание, управление event_loop передаётся не на каждом await. Лишь на том моменте, где возвращается объект Future. Так если мы сделаем await корутины, у которой блокирующий код (по типу принтов) корутина не заморозится, а начнёт его выполнять никуда не убегая в другую задачу, важно понимать, что переход на другую задачу происходит только когда мы ожидаем объект future
один момент не уяснил - если авейтить простой вызов (например, несинхронный реквест), оно ждет? или ей и увнутре тоже надо помечаться = иметь переписанную под асинкайо библиотеку. попробую вечером покатать. например - поставить обычный sleep. засада если нет - если наследовал классы из стандартных не-асинхронных, придется слегка переписывать, рефактора может и не хватить.
я большую часть вопроса вообще не понял, но ты не можешь авейтить что попало, только Awaitable объекты то есть корутины, таски и так далее, несинхронный реквест не будет авейтится -упадет ошибка.
Поправь, правильно ли я понял. если очень грубо: в отличие от многопоточности, где у тебя в питоне есть свой скедулер раздавать кванты времени любому типу кода, используем почти прямые систем коллы, и полагаемся на операционку для таск свитча. То есть если авейтить *свой* код, а не неприкрытые систем коллы из асинкио, то некому скедулить, потому что операционка не умеет свитчить арбитрарные/приватные куски кода. Логично. Но, конечно, костылик такой себе - убрать свой скедулер в пользу операционки *через ТАКОЕ*. Выигрыш - в убирании оверхеда своего скедулера, проигрыш - сужение применения: только системколлы. Да и синтаксис немного напрягает: киворды - доступны, а механика за ними - только после импорта асинкио.
Один из крутейших русскоязычных каналов по python на ютубе! НО! (без критики, но о просьбе) Друже, сделай видос с практикой. Варианты разные: пишем чат, бот, магазин, игру в телеге...
Я новичок в АП. Объясните, вы говорите, что await - это явный флаг, мол я потуплю, а ты иди работай дальше пока. Окей, тогда с этой логикой, если бы было просто sleep(3), понятно, интерпретатор ждет. и с вашей же логикой, если добавить await sleep(3), то должно все получится, ну мы же сказали интерпретатору, что эта функция кортуина (async), в ней указали await sleep(3). Почему это не работает? Я не понимаю. Ps: ааа...досмотрел до конца вроде понял, это типа все блокирующие опрерации - просто sleep, просто родной request (у них под капотом нет await), а asyncio.sleep и aiohttp у них под капотом есть тот самый await. Хотя не до конца все это мне понятно). Ну с requests/aiohttp более менее понятно. Но со sleep нет.
Можно было Semaphore упомянуть. Чтобы люди понимали, что корутина не резиновая. А многие API вообще не любят когда их реквестами досят по 100 запросов в секунду. Вернут 500 ошибку и будут сидеть. Вообще, скорее это и есть слабое место: ограничение серверов на забор/вставку данных. Хотел спросить про мультитрединг+асинхронность: можно ли их как-то совместить, чтобы по максимуму использовать возможности железа (в условиях питона)? На самом деле это просто праздный вопрос из любопытства, учитывая ограничения, о которых я написал в начале.
мультитрединг+асинхронность не даст по максимуму задействовать железо (ядра процессора), ответ в документации CPython (реализации интерпретатора на Си), если кратко то виной этому GIL. А вот связка мультипроцессинг+асинхронность позволит при грамотном построении программы очень неплохо нагрузить железо
чтобы железо по максимуму в дело пустить, это надо другой язык =) вот с питона 13 говорят ГИЛ уберут(опционально), соответственно даже простой многопоточки должно хватать, но это надо будет смотреть как оно в реале будет и я сомневаюсь что прямо все ядра процессора задействует.
Не очень понял момента с засыпанием 3 функций на 1,2,3 секунды. Вот 1 функция уснула на 1 сек. Цикл событий в этот момент запустил 2 функцию и остановил ее на 2 секунды. Почему в примере следом запустилась 3 функция, ведь у 1 функции время сна закончилось и по идее она должна была с паузы уйти и выполниться
а почему ты думаешь что переключение на 2 функцию и отправка ее спать заняло ровно 1 секунду? это очень быстро происходит, первая функция еще свое не отоспала, потому и не включилась, но мысль верная, если бы ее время подошло то она бы проснулась.
Огромное спасибо, появилось понимае как все это работает, но все же вопрос задам, есть библиотека PyQt5 она единственная выполняет нужное мне создание интерфейса ни одна другая его повторить не смогла но она блокирует карутины, можно ли это ка кто обойти и запустить окно без блокировки остальных карутин?
я не знаю конкретно эту библиотеку, но точно знаю что все графические либы имеют встроенный, верный механизм работы с фоновыми задачами, вот это тебе надо поискать и изучить. Скорее всего это отдельные потоки, но может быть и асинхронка, просто надо посмотреть как сами создатели рекомендуют это делать. Чтобы самому велосипеды не придумывать
@@PythonRussian Спасибо, за объяснение буду искать, жаль идея в том что граф интерфейс побочная история проекта скажем так важный но не обязательный модуль, и в таком ключе делать его основой с фоновыми задачами не сильно подходит.
Не очень понятно, как получить выигрыш за счет asyncio, используя только стандартную библиотеку. На 0:38 обещали рассказать принцип работы, а он так и не был объяснен в видео :( Очень хотелось бы подобный пример.
Так в примерах и используется стандартная библиотека. Пересмотрите первую половину. В стандартной библиотеке есть синхронные функции и асинхронные. Как пример, пакеты asyncio, aiohttp. В корутинах надо с await использовать асинхронные.
Не совсем понял, как при ручном создании задач выбрать ту которой нужно приписать await. Если я у себя делаю приписку самой короткой задаче, то скрипт завершается как только выполнится эта самая короткая задача, не дожидаясь остальных. Т.е. как будто нужно приписывать await самой долгой задаче. Но я не знаю заранее, какая из них займет больше всего времени. Объясните, пожалуйста, логику необходимых здесь рассуждений.
Я тоже не понял почему await поставили только у одной задачи. Может правильно будет у всех задач его проставить. Мы ведь заранее можем и не знать какая из них будет выполнена последней.
Потому что поток выполнения на await передаеься следующей корутине в цикле событий. Если в очереди нет других корутин, то main завершается, если вы в main не дождались выполнения корутины.
Крутое видео, спасибо! Правильно ли я понимаю, что в асинке не получится перемешать синхронные функции и асинхронные? Например у меня есть 6 функций обращений к разным внешним ресурсам по апи, но вызываются они в разное время синхронными функциями, получается чтобы воспользоваться благами асинхронности, мне придётся вызывать все асинхронные функции обращений одной асинхронной main функцией разом в одном моменте, а уже потом проводить все остальные синхронные манипуляции?
перемешивать не надо, асинка будет ждать полного выполнения синхронной функции, Но у асинкио есть специальные методы - запуск в отдельном потоке и в отдельном процессе, возможно это поможет вам решить вашу задачу. Или подумать о полной замене всего синхронного на асинк-варианты
@@PythonRussianнемного не ясно, если в корутине написать await response=request.get(...) то разве она не передаст управление следующей корутине? То есть реквест синхронный но в том и суть что пока ждём ответ, то выполняем что-то ещё. Почему вы говорите что нельзя использовать синхронные библиотеки неясно.
на самом деле там есть сложности, по разному реализовано на разных ОС, потому скорее с файлами придется работать используя потоки, асинкио умеет запускать в отдельном потоку блокирующую задачу не мешая текущему циклу событий
Урок отличный, но блин почему пограммисты получают 300к в секунду, но не могут микрофон настроить. И вместо микрофона банка от прингс. Шум в аудасити убирается в два клика.
@@PythonRussian если бы проблема не решалась за 5 минутным видосом, на котором школьник объясняет что да как. Я бы не вайнил. получаю 300к в секунду и умею настраивать микро.
- "умирает" из-за одного блокирующего вызова (!) Не совсем так. Только из-за ДЛИТЕЛЬНОГО блокирующего вызова. Короткие делать в асинхронном коде - никаких проблем. Как, например, писать логи модулем logging из стандартной библиотеки.
Такое ощущение как будто рассказывается для дегенератов. Повторяется что то очевидно по сто раз. Терминология по типу замораживатель времени вообще меня убила Спасибо!
Вопрос в момент усыпления корутины,когда ивент отлажывает эту корутину в список,и переключается на другую,Запросы в бд или на сайт выполняется уже?раз Ивент понял что в этой корутине пришел ответ от Бд либо от сайта,чутка поясните,эти запросы и ответы приходят в момент когда корутину убрали спать?
я просто не хотел усложнять объяснение, но вопрос верный задаете. По сути в момент авейта в ивент луп на самый верх кладется как раз корутина которую ждем(например запрос к сайту) она сразу начинает выполняться. И уже она (обычно это какая то библиотека типа аиохттп под капотом) делает запрос и так как ответ нужно ждать тоже объявляет авейт до момента прихода ответа. От нас это обычно скрыто особенностями реализации библиотек, потому что мы пользователи этих библиотек и нам не очень важно что конкретно они делают, главное понимать как с ними работать (авейты и т.п.). Но если вы сами хотите писать такие библиотеки то тут конечно без погружение в детали асинкио не обойтись.
Только запустил и сразу понял, что это лучшее видео на данную тему из свежих материалов!
Единственное видео, где автор смог понятным образом донести суть асинхронщины, к тому же прошелся ПОСТРОЧНО по коду расъяснив его в деталях, благодарю
Очень жду вторую часть. Спасибо большое за такой информативный и самое главное - бесплатный контент. Ты лучший!
спасибо, но уточните на всякий случай о какой второй части речь?)) у меня дальше по планам мультипроцессинг и давно просят рекурсию
@@PythonRussian Может будет более детальный разбор 🥺🥵
Не, ну реально лучший. Причём с большим отрывом!
@@PythonRussian Рекурсию, да с большим нетерпением ждем!
@@danilfighter6179что тебе здесь непонятного?автор почти целый час разжовывал материал,не понял если то заново смотри и вникай,ты тупо на автопилоте посмотрел нихера не понял и клянчишь вторую зачем та часть
Лучшее объяснение основ асинхрого программирования на питоне в русскоязычном секторе. Большое вам спасибо!
десятки комментаторов уже сказали, что это лучший рассказ про асинхронку, но я бы повторил)) очень классно, что не просто бросаются факты в слушателя, а дальше сам разберется, а по каждому вопросу размусоливается до отдельных слов каждый момент, формируется прочное начальное понимание темы и уверенность в знаниях) Как и многие, думаю, пришел с курса Павла Хошева по парсингу, не знаю, как дела обстоят в его курсе по асинхронке, но в случае с парсингом подход был ровно обратный подходу этого видео - никакого углубления что под капотом, вот вам пример парсера и ключевые слова, вперед. В итоге даже две единственные задачи дались с трудом в том модуле и в итоге ноль понимания сложилось, благо, сие видео помогло разобраться, большое спасибо, подписочку оформил))
Потрясающее видео, все в голове встало на свои места. Много было не понятно раньше в особенности await, но после данного ролика асинхронность стала еще одним навыком для меня. Также хотелось бы отметить пример с гроссмейстером , так как поток один, то 1000 корутин не будет работать также быстро как 15 , одним словом ЛАЙК!
все четко по сути. Очень наглядно.
Всем рекомендую ваш канал!)
Очень понятно все разжевано. Благодарность за видос.
спасибо! всегда было лень разобрать эту тему) тут за первые 20 минут прочухал как оно работает)
Как только мне становилось что-то не понятно, автор, как будто читая мои мысли, это пояснял. Это талант, большое спасибо.
Спасибо за такой объемный интересный и детальный гайд. Продолжай развивать канал!
37:53 блин как же это в точку. У меня было ровно то что говорит автор, асинхронный телеграм бот а внутри него синхронные библиотеки. Вот прям один в один. Автору видео кстати респект за качественное видео! Это пока лучшее пояснение ассинхронисти в Python которое я видел. Продолжай в том же духе!
Просто нет слов. Это лучшая подача материала, которую я встречал на просторах Ютуба.
Автору успехов в развитии канала и огромный респект.
Объяснение просто супер - чётко, ясно и понятно. Автор разобрал все вопросы, которые могли бы возникнуть при взгляде на приведённый код.
Спасибо. 3 дня смотрю про асинхронку. У вас очень хорошо получилось!
Ответ на вопрос 25:18 очень простой. Я его нашел в книге Мэттью Фаулера. Там от пишет, что await запускает очередную итерацию цикла событий, а это зничит, что запускаются ВСЕ ожидающие выполнения задачи. То есть, когда в вашем примере await вы поставили во всех строках сперва запустился цикл с первой задачей (остальные еще не созданы), затем со второй (первая уже выполнена, а третья пока не создана), затем с третьей. Когда await у вас только в последней строке все три задачи запускаются сразу, так как уже находятся в цикле событий. В книге подобный пример не вызывает вопросов, так как там автор сперва явно создает все задачи 'task1=asyncio.create_task(task_one())' а уже потом их ВСЕХ ставит на паузу 'await task1'.
В общем, ваше объяснение этого момента немного сбивает с толку. Но все равно спасибо, так как заставили покопаться в этом вопросе и разобраться.
По моему действительно в видео путаница какаято. Сначала про await говорится что это некоторая операция которая ставит выполнение функции на паузу и передаёт управление другим функциям находящимся в цикле событий (19:56) и ждущим своей очереди , а потом внезапно про await говорится что это блокирующая операция и мы должны дождаться пока функция не отработает (25:18).
ВСЕ задачи запуститься не могут. Из них выбирается одна, которая начинает выполнение
Указать await three() и gather - это не одно и то же поведение. В этом примере работает одинаково. Но поставь в корутине one() паузу больше, чем в three() - в консоли уже не будет 'stop one', т.к. мы не указали явно, что ждем результата one(). А в случае с gather цикл дождется выполнения всех задач, в консоли будет полный вывод.
Спасибо за контент!
При поиске материалов по asyncio сразу нашел твое видео, но из-за непривлекательности заставки пропустил.
После продолжительного чтения документации и статей на Хабре, понял, что нет понимания базы. Вернулся к твоему видео и все стало максимально понятно.
ну ты чего -о книге по обложке судишь?))) да и заставку конкретно в 1 этом случае сгенерил ИИ, ты прям обидел нарождающийся скайнет =) По основам - очень хорошо, что понял и начал их осваивать, я сам в свое время забуксовал, потому что начал не с основ, а с синтаксиса, думал все очевидно.
Спасибо большое за видео. Тут явно более доступно автор объясняет тему, все понял, начинаем работу))
Огромное спасибо! отличное введение в asyncio. И отдельная благодарность за кусочек "из реальной жизни" - про запросы. Как раз пишу себе программку для скачивания сериала с сайта. Там и попробую применить.
Просто гений, легенда объяснений. Я так счастлив не был давно😅
удивлен что видео по асинке может вызвать такую реакцию, но рад
Есть замечание, управление event_loop передаётся не на каждом await. Лишь на том моменте, где возвращается объект Future. Так если мы сделаем await корутины, у которой блокирующий код (по типу принтов) корутина не заморозится, а начнёт его выполнять никуда не убегая в другую задачу, важно понимать, что переход на другую задачу происходит только когда мы ожидаем объект future
Большое спасибо!
Автору огромное спасибо! Разъяснил буквально на пальцах
Наконец-то я понял, что такое асинхронное программирование. Спасибо большое
Лучший, респект
Автор большой молодец!
Корутина засыпает, просыпается мафия)
Наконец то нашел урок где объяснили что такое asyncio
Вы лучший ❤
спасибо большое, все очень доходчиво, интересно и очень полезно.
Большое спасибо за понятное объяснение!
Вот это оригинальная концовка
Огромное спасибо. Как раз пригодится в FastApi.
Еще не смотрела, лайк поставила. Потом зайду посмотрю))
Чел красавчик
Просто великолепно!
Очень все разжевано, спасибо
Кратко и очень понятно, рекомендую!
Отлично, давно ждал, спасибо!
Спасибо за видеоурок :)
🔥
согласен
Очень хорошо, всё по полочкам, всё понятно
Охх какая тема.. Автор бросил вызов решив взяться за Asyncio на своём канале с его стилем объяснения..но я посмотрю и запишу всё!
Привет! Огромное спасибо за видео! А можно объединить многопоточность и Asyncio? Было бы здорово посмотреть твое видео с этим примером)
идея хорошая, надо подумать - сделать ли это сразу или после процессов сразу и про потоки и про процессы.
один момент не уяснил - если авейтить простой вызов (например, несинхронный реквест), оно ждет?
или ей и увнутре тоже надо помечаться = иметь переписанную под асинкайо библиотеку. попробую вечером покатать. например - поставить обычный sleep.
засада если нет - если наследовал классы из стандартных не-асинхронных, придется слегка переписывать, рефактора может и не хватить.
я большую часть вопроса вообще не понял, но ты не можешь авейтить что попало, только Awaitable объекты то есть корутины, таски и так далее, несинхронный реквест не будет авейтится -упадет ошибка.
@@PythonRussian именно это я и спрашивал. Корутины, использующие неасинкио айо запросы. Ошибка. Понял. Значит, приватное айо через потоки.
Поправь, правильно ли я понял.
если очень грубо: в отличие от многопоточности, где у тебя в питоне есть свой скедулер раздавать кванты времени любому типу кода, используем почти прямые систем коллы, и полагаемся на операционку для таск свитча. То есть если авейтить *свой* код, а не неприкрытые систем коллы из асинкио, то некому скедулить, потому что операционка не умеет свитчить арбитрарные/приватные куски кода. Логично.
Но, конечно, костылик такой себе - убрать свой скедулер в пользу операционки *через ТАКОЕ*. Выигрыш - в убирании оверхеда своего скедулера, проигрыш - сужение применения: только системколлы. Да и синтаксис немного напрягает: киворды - доступны, а механика за ними - только после импорта асинкио.
И еще раз спасибо. Твои видео - драгоценны!
Один из крутейших русскоязычных каналов по python на ютубе! НО! (без критики, но о просьбе) Друже, сделай видос с практикой. Варианты разные: пишем чат, бот, магазин, игру в телеге...
у меня на видео то времени нет почти, практика - это сложно, мало кому интересно будет, все же со своими желаниями и планами.
А будет такой же прекрасный урок по multiprocessing?
будет, но попозже и не уверен, что прекрасный)
огромное спасибо за видео!
Не пойму, в питоне изобрели монаду?
пасиба большое!
наконец то асинхронка
Я новичок в АП. Объясните, вы говорите, что await - это явный флаг, мол я потуплю, а ты иди работай дальше пока. Окей, тогда с этой логикой, если бы было просто sleep(3), понятно, интерпретатор ждет. и с вашей же логикой, если добавить await sleep(3), то должно все получится, ну мы же сказали интерпретатору, что эта функция кортуина (async), в ней указали await sleep(3). Почему это не работает? Я не понимаю. Ps: ааа...досмотрел до конца вроде понял, это типа все блокирующие опрерации - просто sleep, просто родной request (у них под капотом нет await), а asyncio.sleep и aiohttp у них под капотом есть тот самый await. Хотя не до конца все это мне понятно). Ну с requests/aiohttp более менее понятно. Но со sleep нет.
Можно было Semaphore упомянуть. Чтобы люди понимали, что корутина не резиновая. А многие API вообще не любят когда их реквестами досят по 100 запросов в секунду. Вернут 500 ошибку и будут сидеть. Вообще, скорее это и есть слабое место: ограничение серверов на забор/вставку данных.
Хотел спросить про мультитрединг+асинхронность: можно ли их как-то совместить, чтобы по максимуму использовать возможности железа (в условиях питона)? На самом деле это просто праздный вопрос из любопытства, учитывая ограничения, о которых я написал в начале.
мультитрединг+асинхронность не даст по максимуму задействовать железо (ядра процессора), ответ в документации CPython (реализации интерпретатора на Си), если кратко то виной этому GIL.
А вот связка мультипроцессинг+асинхронность позволит при грамотном построении программы очень неплохо нагрузить железо
чтобы железо по максимуму в дело пустить, это надо другой язык =) вот с питона 13 говорят ГИЛ уберут(опционально), соответственно даже простой многопоточки должно хватать, но это надо будет смотреть как оно в реале будет и я сомневаюсь что прямо все ядра процессора задействует.
Не очень понял момента с засыпанием 3 функций на 1,2,3 секунды. Вот 1 функция уснула на 1 сек. Цикл событий в этот момент запустил 2 функцию и остановил ее на 2 секунды. Почему в примере следом запустилась 3 функция, ведь у 1 функции время сна закончилось и по идее она должна была с паузы уйти и выполниться
а почему ты думаешь что переключение на 2 функцию и отправка ее спать заняло ровно 1 секунду? это очень быстро происходит, первая функция еще свое не отоспала, потому и не включилась, но мысль верная, если бы ее время подошло то она бы проснулась.
ещё бы разбор асинхронщины в django 5
увы, этого точно не будет, я не использую джанго
Спасибо, полезно
Огромное спасибо, появилось понимае как все это работает, но все же вопрос задам, есть библиотека PyQt5 она единственная выполняет нужное мне создание интерфейса ни одна другая его повторить не смогла но она блокирует карутины, можно ли это ка кто обойти и запустить окно без блокировки остальных карутин?
я не знаю конкретно эту библиотеку, но точно знаю что все графические либы имеют встроенный, верный механизм работы с фоновыми задачами, вот это тебе надо поискать и изучить. Скорее всего это отдельные потоки, но может быть и асинхронка, просто надо посмотреть как сами создатели рекомендуют это делать. Чтобы самому велосипеды не придумывать
@@PythonRussian Спасибо, за объяснение буду искать, жаль идея в том что граф интерфейс побочная история проекта скажем так важный но не обязательный модуль, и в таком ключе делать его основой с фоновыми задачами не сильно подходит.
@@pLop6912 В qt все подобные задачи через воркеры QThread решаются
Не очень понятно, как получить выигрыш за счет asyncio, используя только стандартную библиотеку.
На 0:38 обещали рассказать принцип работы, а он так и не был объяснен в видео :( Очень хотелось бы подобный пример.
Так в примерах и используется стандартная библиотека.
Пересмотрите первую половину.
В стандартной библиотеке есть синхронные функции и асинхронные. Как пример, пакеты asyncio, aiohttp. В корутинах надо с await использовать асинхронные.
aiohttp не стандартная.
Красава бро
Лучший! Спасибо.
Не совсем понял, как при ручном создании задач выбрать ту которой нужно приписать await.
Если я у себя делаю приписку самой короткой задаче, то скрипт завершается как только выполнится эта самая короткая задача, не дожидаясь остальных.
Т.е. как будто нужно приписывать await самой долгой задаче. Но я не знаю заранее, какая из них займет больше всего времени.
Объясните, пожалуйста, логику необходимых здесь рассуждений.
тоже не совсем понятно, но можно сделать вывод, если больше одной задачи, лучше не париться с созданием тасков вручную а просто использовать gather().
Я тоже не понял почему await поставили только у одной задачи. Может правильно будет у всех задач его проставить. Мы ведь заранее можем и не знать какая из них будет выполнена последней.
Привет, асинхронность можно считать синонимом конкурентности?
я вот сейчас задумался и особо сильных возражений не имею
так и не поняла, почему если после await asyncio.sleep(2) я напишу следующей строчкой input(), то программа просто завершится без запроса ввода ?
Потому что поток выполнения на await передаеься следующей корутине в цикле событий.
Если в очереди нет других корутин, то main завершается, если вы в main не дождались выполнения корутины.
Крутое видео, спасибо!
Правильно ли я понимаю, что в асинке не получится перемешать синхронные функции и асинхронные? Например у меня есть 6 функций обращений к разным внешним ресурсам по апи, но вызываются они в разное время синхронными функциями, получается чтобы воспользоваться благами асинхронности, мне придётся вызывать все асинхронные функции обращений одной асинхронной main функцией разом в одном моменте, а уже потом проводить все остальные синхронные манипуляции?
перемешивать не надо, асинка будет ждать полного выполнения синхронной функции, Но у асинкио есть специальные методы - запуск в отдельном потоке и в отдельном процессе, возможно это поможет вам решить вашу задачу. Или подумать о полной замене всего синхронного на асинк-варианты
@@PythonRussianнемного не ясно, если в корутине написать await response=request.get(...) то разве она не передаст управление следующей корутине? То есть реквест синхронный но в том и суть что пока ждём ответ, то выполняем что-то ещё. Почему вы говорите что нельзя использовать синхронные библиотеки неясно.
Здравствуйте, спасибо за видео! Только я не понял как правильно await‘ы ставить в асинхронных функциях?
мы их ставим там, где нам нужно дождаться результата какой-либо корутины
@@PythonRussian понял вас, спасибо!
Четко!!!
мужик!!!
Спасибо
Пресное видео, замечательная передача материала.... но есть же perf_counter из time для более точного вычисления времени выполнения...
c файлами тоже есть асинхронная работа?
на самом деле там есть сложности, по разному реализовано на разных ОС, потому скорее с файлами придется работать используя потоки, асинкио умеет запускать в отдельном потоку блокирующую задачу не мешая текущему циклу событий
есть
Пушка брат
СПАСИБОООООО!!!
The BEST!
Прочитал сначала как: разбор arduino)) думаю, что за приколы 😂
pochemu my napisali await asyncio.create_task(three()) a ne prosto asyncio.create_task(three())
Blin ya nashyol etot otvet na 25:28 Drugiye progery ne skazali by Spasibo Broooo
Круто
Урок отличный, но блин почему пограммисты получают 300к в секунду, но не могут микрофон настроить. И вместо микрофона банка от прингс. Шум в аудасити убирается в два клика.
так уж в жизни устроено, выбирать надо что-то одно - или разбираться в аудасити\микрофонах или много получать. =)
@@PythonRussian если бы проблема не решалась за 5 минутным видосом, на котором школьник объясняет что да как. Я бы не вайнил. получаю 300к в секунду и умею настраивать микро.
- "умирает" из-за одного блокирующего вызова (!)
Не совсем так. Только из-за ДЛИТЕЛЬНОГО блокирующего вызова. Короткие делать в асинхронном коде - никаких проблем. Как, например, писать логи модулем logging из стандартной библиотеки.
Материал объяснил хорошо, но воды много. Слишком много повторений.
Кто знает как два лайка поставить???
Очень плохое объяснение асинхронности. Куча воды, мутные термины... Советую поискать другие источники, их полно!
Такое ощущение как будто рассказывается для дегенератов. Повторяется что то очевидно по сто раз. Терминология по типу замораживатель времени вообще меня убила Спасибо!
а главное -это работает )))
Сколько людей, только мнений. Мне не зашло, очень мутное объяснение
это нормально что не зашло, для того и есть инет - чтобы каждый находил то, что ему нравится
Слишком много слов, усложняет пониманимание информации, на х2 засыпаю
Вопрос в момент усыпления корутины,когда ивент отлажывает эту корутину в список,и переключается на другую,Запросы в бд или на сайт выполняется уже?раз Ивент понял что в этой корутине пришел ответ от Бд либо от сайта,чутка поясните,эти запросы и ответы приходят в момент когда корутину убрали спать?
я просто не хотел усложнять объяснение, но вопрос верный задаете. По сути в момент авейта в ивент луп на самый верх кладется как раз корутина которую ждем(например запрос к сайту) она сразу начинает выполняться. И уже она (обычно это какая то библиотека типа аиохттп под капотом) делает запрос и так как ответ нужно ждать тоже объявляет авейт до момента прихода ответа. От нас это обычно скрыто особенностями реализации библиотек, потому что мы пользователи этих библиотек и нам не очень важно что конкретно они делают, главное понимать как с ними работать (авейты и т.п.). Но если вы сами хотите писать такие библиотеки то тут конечно без погружение в детали асинкио не обойтись.
@@PythonRussian спасибо за хорошее разьяснение...
Лайк подписка, очень доходчиво, спасибо
Отличное объяснение! Благодарю!