Основы Asyncio

  Рет қаралды 10,584

Python Russian

Python Russian

3 ай бұрын

В продолжение беседы о конкурентости и параллельности в Python, пришла пора посмотреть на модный молодежный asyncio
Асинхронное выполнение подходит для IO-bound задач, работает ровно 1 поток
Плюсы:
+ скорость и экономия времени, вместо x + y + z = max(x, y, z)
+ управляемость
+ меньше потребление ресурсов (в сравнении с потоками)
Минусы:
- "умирает" из-за одного блокирующего вызова (!)
- не безразмерный, нужно понимать, что корутины не бесплатные
важные принципы:
1) корутина работает как генератор
2) async - явный флаг, что данная функция является асинхронной (корутиной)
3) await - явный флаг, что в это месте функция встает на паузу и дает работать другим, пока ждет свои данные
4) event loop - цикл событий, механизм, который отвечает за планирование и запуск корутин. Можно представить как
список/очередь, из которого в вечном цикле достаются и запускаются корутины
Частые ошибки:
- не использование await внутри корутины
- создание корутины, но использование ее, как функции
- использование внутри корутин синхронного(блокирующего) кода, в том числе IO
Читать:
docs.python.org/3/library/asy...
Фаулер М. "Asyncio и конкурентное программирование на Python"
Присоединяйтесь к помощи каналу, будет интересно)
✔️Бусти boosty.to/python_russian/donate
✔️Юмани 410011506612886
Будь первым везде и всегда, включай уведомления о новых выпусках 🔔
#Python #PythonRussian #Asyncio

Пікірлер: 87
@user-bh8qg5gq7b
@user-bh8qg5gq7b Күн бұрын
Спасибо. 3 дня смотрю про асинхронку. У вас очень хорошо получилось!
@BaDiTaRaKaN
@BaDiTaRaKaN 2 күн бұрын
Наконец-то я понял, что такое асинхронное программирование. Спасибо большое
@IlyaErokhin-uv7vx
@IlyaErokhin-uv7vx Ай бұрын
Единственное видео, где автор смог понятным образом донести суть асинхронщины, к тому же прошелся ПОСТРОЧНО по коду расъяснив его в деталях, благодарю
@podgorniy.r
@podgorniy.r Ай бұрын
Только запустил и сразу понял, что это лучшее видео на данную тему из свежих материалов!
@danilfighter6179
@danilfighter6179 3 ай бұрын
Очень жду вторую часть. Спасибо большое за такой информативный и самое главное - бесплатный контент. Ты лучший!
@PythonRussian
@PythonRussian 3 ай бұрын
спасибо, но уточните на всякий случай о какой второй части речь?)) у меня дальше по планам мультипроцессинг и давно просят рекурсию
@danilfighter6179
@danilfighter6179 3 ай бұрын
@@PythonRussian Может будет более детальный разбор 🥺🥵
@user-ed1hy3by5p
@user-ed1hy3by5p 3 ай бұрын
Не, ну реально лучший. Причём с большим отрывом!
@user-buser_eto_ja
@user-buser_eto_ja 3 ай бұрын
@@PythonRussian Рекурсию, да с большим нетерпением ждем!
@Nicktimes
@Nicktimes 2 ай бұрын
​@@danilfighter6179что тебе здесь непонятного?автор почти целый час разжовывал материал,не понял если то заново смотри и вникай,ты тупо на автопилоте посмотрел нихера не понял и клянчишь вторую зачем та часть
@SemyonKalyakulin
@SemyonKalyakulin 3 ай бұрын
все четко по сути. Очень наглядно. Всем рекомендую ваш канал!)
@user-oq9tu5rw9z
@user-oq9tu5rw9z 16 күн бұрын
Спасибо за контент! При поиске материалов по asyncio сразу нашел твое видео, но из-за непривлекательности заставки пропустил. После продолжительного чтения документации и статей на Хабре, понял, что нет понимания базы. Вернулся к твоему видео и все стало максимально понятно.
@PythonRussian
@PythonRussian 16 күн бұрын
ну ты чего -о книге по обложке судишь?))) да и заставку конкретно в 1 этом случае сгенерил ИИ, ты прям обидел нарождающийся скайнет =) По основам - очень хорошо, что понял и начал их осваивать, я сам в свое время забуксовал, потому что начал не с основ, а с синтаксиса, думал все очевидно.
@aradarbinyan312
@aradarbinyan312 Ай бұрын
37:53 блин как же это в точку. У меня было ровно то что говорит автор, асинхронный телеграм бот а внутри него синхронные библиотеки. Вот прям один в один. Автору видео кстати респект за качественное видео! Это пока лучшее пояснение ассинхронисти в Python которое я видел. Продолжай в том же духе!
@ProficusLets
@ProficusLets 2 ай бұрын
Спасибо за такой объемный интересный и детальный гайд. Продолжай развивать канал!
@photo_graf_khv
@photo_graf_khv 23 күн бұрын
Отличное объяснение! Благодарю!
@fragtv8163
@fragtv8163 Ай бұрын
Просто гений, легенда объяснений. Я так счастлив не был давно😅
@PythonRussian
@PythonRussian Ай бұрын
удивлен что видео по асинке может вызвать такую реакцию, но рад
@dilirink9222
@dilirink9222 2 ай бұрын
спасибо! всегда было лень разобрать эту тему) тут за первые 20 минут прочухал как оно работает)
@Mesedal
@Mesedal 3 ай бұрын
Большое спасибо за понятное объяснение!
@otbephncb4458
@otbephncb4458 3 ай бұрын
Корутина засыпает, просыпается мафия)
@alexeymatveev9031
@alexeymatveev9031 3 ай бұрын
Отлично, давно ждал, спасибо!
@davidbibi3138
@davidbibi3138 3 ай бұрын
Спасибо за видеоурок :)
@ngbaranov
@ngbaranov 2 ай бұрын
Очень хорошо, всё по полочкам, всё понятно
@user-ho8ve3kc4i
@user-ho8ve3kc4i Ай бұрын
спасибо большое, все очень доходчиво, интересно и очень полезно.
@user-im7if6ps3z
@user-im7if6ps3z 14 күн бұрын
Кратко и очень понятно, рекомендую!
@SashaBorandi
@SashaBorandi 3 ай бұрын
Очень все разжевано, спасибо
@user-us6vw8yb9l
@user-us6vw8yb9l 3 ай бұрын
Еще не смотрела, лайк поставила. Потом зайду посмотрю))
@Tonyjusttony
@Tonyjusttony Ай бұрын
Лучший! Спасибо.
@alexgreen984
@alexgreen984 2 ай бұрын
Спасибо, полезно
@rayrayray4653
@rayrayray4653 3 ай бұрын
Четко!!!
@FarofWell
@FarofWell 3 ай бұрын
наконец то асинхронка
@user-buser_eto_ja
@user-buser_eto_ja 3 ай бұрын
СПАСИБОООООО!!!
@blackark11
@blackark11 Ай бұрын
Спасибо
@donatelmrlybarskiy6171
@donatelmrlybarskiy6171 9 күн бұрын
Пушка брат
@stspartak
@stspartak 3 ай бұрын
The BEST!
@denoxi
@denoxi 3 ай бұрын
Привет! Огромное спасибо за видео! А можно объединить многопоточность и Asyncio? Было бы здорово посмотреть твое видео с этим примером)
@PythonRussian
@PythonRussian 3 ай бұрын
идея хорошая, надо подумать - сделать ли это сразу или после процессов сразу и про потоки и про процессы.
@lifestyletv139
@lifestyletv139 3 ай бұрын
Красава бро
@tryhard114
@tryhard114 3 ай бұрын
Охх какая тема.. Автор бросил вызов решив взяться за Asyncio на своём канале с его стилем объяснения..но я посмотрю и запишу всё!
@user-lo3xm2ff9w
@user-lo3xm2ff9w 3 ай бұрын
мужик!!!
@quasar-lv6pp
@quasar-lv6pp 3 ай бұрын
Один из крутейших русскоязычных каналов по python на ютубе! НО! (без критики, но о просьбе) Друже, сделай видос с практикой. Варианты разные: пишем чат, бот, магазин, игру в телеге...
@PythonRussian
@PythonRussian 3 ай бұрын
у меня на видео то времени нет почти, практика - это сложно, мало кому интересно будет, все же со своими желаниями и планами.
@kishiva4965
@kishiva4965 9 күн бұрын
Крутое видео, спасибо! Правильно ли я понимаю, что в асинке не получится перемешать синхронные функции и асинхронные? Например у меня есть 6 функций обращений к разным внешним ресурсам по апи, но вызываются они в разное время синхронными функциями, получается чтобы воспользоваться благами асинхронности, мне придётся вызывать все асинхронные функции обращений одной асинхронной main функцией разом в одном моменте, а уже потом проводить все остальные синхронные манипуляции?
@PythonRussian
@PythonRussian 9 күн бұрын
перемешивать не надо, асинка будет ждать полного выполнения синхронной функции, Но у асинкио есть специальные методы - запуск в отдельном потоке и в отдельном процессе, возможно это поможет вам решить вашу задачу. Или подумать о полной замене всего синхронного на асинк-варианты
@stevem4806
@stevem4806 2 ай бұрын
Здравствуйте, спасибо за видео! Только я не понял как правильно await‘ы ставить в асинхронных функциях?
@PythonRussian
@PythonRussian 2 ай бұрын
мы их ставим там, где нам нужно дождаться результата какой-либо корутины
@stevem4806
@stevem4806 2 ай бұрын
@@PythonRussian понял вас, спасибо!
@user-mobilnik
@user-mobilnik 2 ай бұрын
А будет такой же прекрасный урок по multiprocessing?
@PythonRussian
@PythonRussian 2 ай бұрын
будет, но попозже и не уверен, что прекрасный)
@pLop6912
@pLop6912 Күн бұрын
Огромное спасибо, появилось понимае как все это работает, но все же вопрос задам, есть библиотека PyQt5 она единственная выполняет нужное мне создание интерфейса ни одна другая его повторить не смогла но она блокирует карутины, можно ли это ка кто обойти и запустить окно без блокировки остальных карутин?
@PythonRussian
@PythonRussian Күн бұрын
я не знаю конкретно эту библиотеку, но точно знаю что все графические либы имеют встроенный, верный механизм работы с фоновыми задачами, вот это тебе надо поискать и изучить. Скорее всего это отдельные потоки, но может быть и асинхронка, просто надо посмотреть как сами создатели рекомендуют это делать. Чтобы самому велосипеды не придумывать
@pLop6912
@pLop6912 Күн бұрын
@@PythonRussian Спасибо, за объяснение буду искать, жаль идея в том что граф интерфейс побочная история проекта скажем так важный но не обязательный модуль, и в таком ключе делать его основой с фоновыми задачами не сильно подходит.
@user-bh8qg5gq7b
@user-bh8qg5gq7b Күн бұрын
Я новичок в АП. Объясните, вы говорите, что await - это явный флаг, мол я потуплю, а ты иди работай дальше пока. Окей, тогда с этой логикой, если бы было просто sleep(3), понятно, интерпретатор ждет. и с вашей же логикой, если добавить await sleep(3), то должно все получится, ну мы же сказали интерпретатору, что эта функция кортуина (async), в ней указали await sleep(3). Почему это не работает? Я не понимаю. Ps: ааа...досмотрел до конца вроде понял, это типа все блокирующие опрерации - просто sleep, просто родной request (у них под капотом нет await), а asyncio.sleep и aiohttp у них под капотом есть тот самый await. Хотя не до конца все это мне понятно). Ну с requests/aiohttp более менее понятно. Но со sleep нет.
@benben-fz2es
@benben-fz2es 3 ай бұрын
один момент не уяснил - если авейтить простой вызов (например, несинхронный реквест), оно ждет? или ей и увнутре тоже надо помечаться = иметь переписанную под асинкайо библиотеку. попробую вечером покатать. например - поставить обычный sleep. засада если нет - если наследовал классы из стандартных не-асинхронных, придется слегка переписывать, рефактора может и не хватить.
@PythonRussian
@PythonRussian 3 ай бұрын
я большую часть вопроса вообще не понял, но ты не можешь авейтить что попало, только Awaitable объекты то есть корутины, таски и так далее, несинхронный реквест не будет авейтится -упадет ошибка.
@benben-fz2es
@benben-fz2es 3 ай бұрын
@@PythonRussian именно это я и спрашивал. Корутины, использующие неасинкио айо запросы. Ошибка. Понял. Значит, приватное айо через потоки.
@benben-fz2es
@benben-fz2es 3 ай бұрын
Поправь, правильно ли я понял. если очень грубо: в отличие от многопоточности, где у тебя в питоне есть свой скедулер раздавать кванты времени любому типу кода, используем почти прямые систем коллы, и полагаемся на операционку для таск свитча. То есть если авейтить *свой* код, а не неприкрытые систем коллы из асинкио, то некому скедулить, потому что операционка не умеет свитчить арбитрарные/приватные куски кода. Логично. Но, конечно, костылик такой себе - убрать свой скедулер в пользу операционки *через ТАКОЕ*. Выигрыш - в убирании оверхеда своего скедулера, проигрыш - сужение применения: только системколлы. Да и синтаксис немного напрягает: киворды - доступны, а механика за ними - только после импорта асинкио.
@benben-fz2es
@benben-fz2es 3 ай бұрын
И еще раз спасибо. Твои видео - драгоценны!
@user-nu3ot7td1j
@user-nu3ot7td1j Ай бұрын
так и не поняла, почему если после await asyncio.sleep(2) я напишу следующей строчкой input(), то программа просто завершится без запроса ввода ?
@user-zb5yz9dm2f
@user-zb5yz9dm2f 29 күн бұрын
Потому что поток выполнения на await передаеься следующей корутине в цикле событий. Если в очереди нет других корутин, то main завершается, если вы в main не дождались выполнения корутины.
@sergeyvereshaghin2330
@sergeyvereshaghin2330 3 ай бұрын
Прочитал сначала как: разбор arduino)) думаю, что за приколы 😂
@user-nz1nc1cu6i
@user-nz1nc1cu6i 3 ай бұрын
ещё бы разбор асинхронщины в django 5
@PythonRussian
@PythonRussian 3 ай бұрын
увы, этого точно не будет, я не использую джанго
@paulkarkarin466
@paulkarkarin466 3 ай бұрын
Можно было Semaphore упомянуть. Чтобы люди понимали, что корутина не резиновая. А многие API вообще не любят когда их реквестами досят по 100 запросов в секунду. Вернут 500 ошибку и будут сидеть. Вообще, скорее это и есть слабое место: ограничение серверов на забор/вставку данных. Хотел спросить про мультитрединг+асинхронность: можно ли их как-то совместить, чтобы по максимуму использовать возможности железа (в условиях питона)? На самом деле это просто праздный вопрос из любопытства, учитывая ограничения, о которых я написал в начале.
@sio8730
@sio8730 3 ай бұрын
мультитрединг+асинхронность не даст по максимуму задействовать железо (ядра процессора), ответ в документации CPython (реализации интерпретатора на Си), если кратко то виной этому GIL. А вот связка мультипроцессинг+асинхронность позволит при грамотном построении программы очень неплохо нагрузить железо
@PythonRussian
@PythonRussian 3 ай бұрын
чтобы железо по максимуму в дело пустить, это надо другой язык =) вот с питона 13 говорят ГИЛ уберут(опционально), соответственно даже простой многопоточки должно хватать, но это надо будет смотреть как оно в реале будет и я сомневаюсь что прямо все ядра процессора задействует.
@DeliriumOFF
@DeliriumOFF 3 ай бұрын
c файлами тоже есть асинхронная работа?
@PythonRussian
@PythonRussian 3 ай бұрын
на самом деле там есть сложности, по разному реализовано на разных ОС, потому скорее с файлами придется работать используя потоки, асинкио умеет запускать в отдельном потоку блокирующую задачу не мешая текущему циклу событий
@non5309
@non5309 3 ай бұрын
есть
@Sizt
@Sizt Ай бұрын
Не очень понятно, как получить выигрыш за счет asyncio, используя только стандартную библиотеку. На 0:38 обещали рассказать принцип работы, а он так и не был объяснен в видео :( Очень хотелось бы подобный пример.
@user-zb5yz9dm2f
@user-zb5yz9dm2f 29 күн бұрын
Так в примерах и используется стандартная библиотека. Пересмотрите первую половину. В стандартной библиотеке есть синхронные функции и асинхронные. Как пример, пакеты asyncio, aiohttp. В корутинах надо с await использовать асинхронные.
@Sizt
@Sizt 28 күн бұрын
aiohttp не стандартная.
@tenebris8800
@tenebris8800 Ай бұрын
Кто знает как два лайка поставить???
@crazzy6903
@crazzy6903 8 күн бұрын
Такое ощущение как будто рассказывается для дегенератов. Повторяется что то очевидно по сто раз. Терминология по типу замораживатель времени вообще меня убила Спасибо!
@PythonRussian
@PythonRussian 8 күн бұрын
а главное -это работает )))
@user-zx6fq1ig4h
@user-zx6fq1ig4h Ай бұрын
Очень плохое объяснение асинхронности. Куча воды, мутные термины... Советую поискать другие источники, их полно!
@eugenybobylev5438
@eugenybobylev5438 14 күн бұрын
Сколько людей, только мнений. Мне не зашло, очень мутное объяснение
@PythonRussian
@PythonRussian 14 күн бұрын
это нормально что не зашло, для того и есть инет - чтобы каждый находил то, что ему нравится
@Hi-gjgruncdun
@Hi-gjgruncdun Ай бұрын
Лайк подписка, очень доходчиво, спасибо
@mslq
@mslq 3 ай бұрын
tkinter и прочие GUI ведь уже и есть асинхронка, или как она там называется - событийное выполнение, даже root.mainloop такой же. На ATmega ещё пишу на асме, у меня там своя ось, тоже все таймеры, и прочие элементы все в асинхронке работают, гарантированный проход всей программы 1 ms.
@PythonRussian
@PythonRussian 3 ай бұрын
не готов по гуи ответить, у них могут быть и несколько потоков, но с той же логикой - главный поток обрабатывает отрисовку и клики, а в потоках-демонах все обрабатывается не замедляя главный и не мешая ему. Но опять же -не силен, не занимался, могу жестоко ошибиться.
@Nicktimes
@Nicktimes 2 ай бұрын
Вопрос в момент усыпления корутины,когда ивент отлажывает эту корутину в список,и переключается на другую,Запросы в бд или на сайт выполняется уже?раз Ивент понял что в этой корутине пришел ответ от Бд либо от сайта,чутка поясните,эти запросы и ответы приходят в момент когда корутину убрали спать?
@PythonRussian
@PythonRussian 2 ай бұрын
я просто не хотел усложнять объяснение, но вопрос верный задаете. По сути в момент авейта в ивент луп на самый верх кладется как раз корутина которую ждем(например запрос к сайту) она сразу начинает выполняться. И уже она (обычно это какая то библиотека типа аиохттп под капотом) делает запрос и так как ответ нужно ждать тоже объявляет авейт до момента прихода ответа. От нас это обычно скрыто особенностями реализации библиотек, потому что мы пользователи этих библиотек и нам не очень важно что конкретно они делают, главное понимать как с ними работать (авейты и т.п.). Но если вы сами хотите писать такие библиотеки то тут конечно без погружение в детали асинкио не обойтись.
@Nicktimes
@Nicktimes 2 ай бұрын
@@PythonRussian спасибо за хорошее разьяснение...
@mslq
@mslq 3 ай бұрын
Я всегда наступаю на грабли и что под капотом и на капоте, и много раз повторять надо чтобы усвоить.
Основы многопоточности в Python
58:46
Python Russian
Рет қаралды 4,4 М.
ПАРАЗИТОВ МНОГО, НО ОН ОДИН!❤❤❤
01:00
Chapitosiki
Рет қаралды 2,7 МЛН
They RUINED Everything! 😢
00:31
Carter Sharer
Рет қаралды 12 МЛН
Собеседование на позицию Senior Python Developer 5000$ #12
21:18
Python собеседования
Рет қаралды 3 М.
Решаем тестовое задание на позицию junior python backend разработчик
21:18
𝐧𝐞𝐫𝐝𝐢𝐳𝐚𝐲-𝐜𝐨𝐝𝐞
Рет қаралды 10 М.
Intro to async Python | Writing a Web Crawler
14:23
mCoding
Рет қаралды 73 М.
Главная тайна IT, язык Smalltalk
18:50
Python Russian
Рет қаралды 3,3 М.
Redis за 20 минут
23:22
suchkov tech
Рет қаралды 95 М.
ПАРАЗИТОВ МНОГО, НО ОН ОДИН!❤❤❤
01:00
Chapitosiki
Рет қаралды 2,7 МЛН