Основы Asyncio

В продолжение беседы о конкурентости и параллельности в 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

Пікірлер: 71

  • @IlyaErokhin-uv7vx
    @IlyaErokhin-uv7vx29 күн бұрын

    Единственное видео, где автор смог понятным образом донести суть асинхронщины, к тому же прошелся ПОСТРОЧНО по коду расъяснив его в деталях, благодарю

  • @podgorniy.r
    @podgorniy.rАй бұрын

    Только запустил и сразу понял, что это лучшее видео на данную тему из свежих материалов!

  • @danilfighter6179
    @danilfighter61792 ай бұрын

    Очень жду вторую часть. Спасибо большое за такой информативный и самое главное - бесплатный контент. Ты лучший!

  • @PythonRussian

    @PythonRussian

    2 ай бұрын

    спасибо, но уточните на всякий случай о какой второй части речь?)) у меня дальше по планам мультипроцессинг и давно просят рекурсию

  • @danilfighter6179

    @danilfighter6179

    2 ай бұрын

    @@PythonRussian Может будет более детальный разбор 🥺🥵

  • @user-ed1hy3by5p

    @user-ed1hy3by5p

    2 ай бұрын

    Не, ну реально лучший. Причём с большим отрывом!

  • @user-buser_eto_ja

    @user-buser_eto_ja

    2 ай бұрын

    @@PythonRussian Рекурсию, да с большим нетерпением ждем!

  • @Nicktimes

    @Nicktimes

    2 ай бұрын

    ​@@danilfighter6179что тебе здесь непонятного?автор почти целый час разжовывал материал,не понял если то заново смотри и вникай,ты тупо на автопилоте посмотрел нихера не понял и клянчишь вторую зачем та часть

  • @aradarbinyan312
    @aradarbinyan31219 күн бұрын

    37:53 блин как же это в точку. У меня было ровно то что говорит автор, асинхронный телеграм бот а внутри него синхронные библиотеки. Вот прям один в один. Автору видео кстати респект за качественное видео! Это пока лучшее пояснение ассинхронисти в Python которое я видел. Продолжай в том же духе!

  • @SemyonKalyakulin
    @SemyonKalyakulin2 ай бұрын

    все четко по сути. Очень наглядно. Всем рекомендую ваш канал!)

  • @photo_graf_khv
    @photo_graf_khv7 күн бұрын

    Отличное объяснение! Благодарю!

  • @otbephncb4458
    @otbephncb44582 ай бұрын

    Корутина засыпает, просыпается мафия)

  • @dilirink9222
    @dilirink9222Ай бұрын

    спасибо! всегда было лень разобрать эту тему) тут за первые 20 минут прочухал как оно работает)

  • @ProficusLets
    @ProficusLetsАй бұрын

    Спасибо за такой объемный интересный и детальный гайд. Продолжай развивать канал!

  • @fragtv8163
    @fragtv816319 күн бұрын

    Просто гений, легенда объяснений. Я так счастлив не был давно😅

  • @PythonRussian

    @PythonRussian

    18 күн бұрын

    удивлен что видео по асинке может вызвать такую реакцию, но рад

  • @Mesedal
    @Mesedal2 ай бұрын

    Большое спасибо за понятное объяснение!

  • @alexeymatveev9031
    @alexeymatveev90312 ай бұрын

    Отлично, давно ждал, спасибо!

  • @davidbibi3138
    @davidbibi31382 ай бұрын

    Спасибо за видеоурок :)

  • @ngbaranov
    @ngbaranovАй бұрын

    Очень хорошо, всё по полочкам, всё понятно

  • @user-us6vw8yb9l
    @user-us6vw8yb9l2 ай бұрын

    Еще не смотрела, лайк поставила. Потом зайду посмотрю))

  • @user-ho8ve3kc4i
    @user-ho8ve3kc4i29 күн бұрын

    спасибо большое, все очень доходчиво, интересно и очень полезно.

  • @SashaBorandi
    @SashaBorandi2 ай бұрын

    Очень все разжевано, спасибо

  • @blackark11
    @blackark1121 күн бұрын

    Спасибо

  • @Tonyjusttony
    @TonyjusttonyАй бұрын

    Лучший! Спасибо.

  • @alexgreen984
    @alexgreen984Ай бұрын

    Спасибо, полезно

  • @rayrayray4653
    @rayrayray46532 ай бұрын

    Четко!!!

  • @lifestyletv139
    @lifestyletv1392 ай бұрын

    Красава бро

  • @user-buser_eto_ja
    @user-buser_eto_ja2 ай бұрын

    СПАСИБОООООО!!!

  • @FarofWell
    @FarofWell2 ай бұрын

    наконец то асинхронка

  • @stspartak
    @stspartak2 ай бұрын

    The BEST!

  • @user-lo3xm2ff9w
    @user-lo3xm2ff9w2 ай бұрын

    мужик!!!

  • @tryhard114
    @tryhard1142 ай бұрын

    Охх какая тема.. Автор бросил вызов решив взяться за Asyncio на своём канале с его стилем объяснения..но я посмотрю и запишу всё!

  • @denoxi
    @denoxi2 ай бұрын

    Привет! Огромное спасибо за видео! А можно объединить многопоточность и Asyncio? Было бы здорово посмотреть твое видео с этим примером)

  • @PythonRussian

    @PythonRussian

    2 ай бұрын

    идея хорошая, надо подумать - сделать ли это сразу или после процессов сразу и про потоки и про процессы.

  • @quasar-lv6pp
    @quasar-lv6pp2 ай бұрын

    Один из крутейших русскоязычных каналов по python на ютубе! НО! (без критики, но о просьбе) Друже, сделай видос с практикой. Варианты разные: пишем чат, бот, магазин, игру в телеге...

  • @PythonRussian

    @PythonRussian

    2 ай бұрын

    у меня на видео то времени нет почти, практика - это сложно, мало кому интересно будет, все же со своими желаниями и планами.

  • @stevem4806
    @stevem48062 ай бұрын

    Здравствуйте, спасибо за видео! Только я не понял как правильно await‘ы ставить в асинхронных функциях?

  • @PythonRussian

    @PythonRussian

    2 ай бұрын

    мы их ставим там, где нам нужно дождаться результата какой-либо корутины

  • @stevem4806

    @stevem4806

    2 ай бұрын

    @@PythonRussian понял вас, спасибо!

  • @user-mobilnik
    @user-mobilnikАй бұрын

    А будет такой же прекрасный урок по multiprocessing?

  • @PythonRussian

    @PythonRussian

    Ай бұрын

    будет, но попозже и не уверен, что прекрасный)

  • @benben-fz2es
    @benben-fz2es2 ай бұрын

    один момент не уяснил - если авейтить простой вызов (например, несинхронный реквест), оно ждет? или ей и увнутре тоже надо помечаться = иметь переписанную под асинкайо библиотеку. попробую вечером покатать. например - поставить обычный sleep. засада если нет - если наследовал классы из стандартных не-асинхронных, придется слегка переписывать, рефактора может и не хватить.

  • @PythonRussian

    @PythonRussian

    2 ай бұрын

    я большую часть вопроса вообще не понял, но ты не можешь авейтить что попало, только Awaitable объекты то есть корутины, таски и так далее, несинхронный реквест не будет авейтится -упадет ошибка.

  • @benben-fz2es

    @benben-fz2es

    2 ай бұрын

    @@PythonRussian именно это я и спрашивал. Корутины, использующие неасинкио айо запросы. Ошибка. Понял. Значит, приватное айо через потоки.

  • @benben-fz2es

    @benben-fz2es

    2 ай бұрын

    Поправь, правильно ли я понял. если очень грубо: в отличие от многопоточности, где у тебя в питоне есть свой скедулер раздавать кванты времени любому типу кода, используем почти прямые систем коллы, и полагаемся на операционку для таск свитча. То есть если авейтить *свой* код, а не неприкрытые систем коллы из асинкио, то некому скедулить, потому что операционка не умеет свитчить арбитрарные/приватные куски кода. Логично. Но, конечно, костылик такой себе - убрать свой скедулер в пользу операционки *через ТАКОЕ*. Выигрыш - в убирании оверхеда своего скедулера, проигрыш - сужение применения: только системколлы. Да и синтаксис немного напрягает: киворды - доступны, а механика за ними - только после импорта асинкио.

  • @benben-fz2es

    @benben-fz2es

    2 ай бұрын

    И еще раз спасибо. Твои видео - драгоценны!

  • @user-nu3ot7td1j
    @user-nu3ot7td1jАй бұрын

    так и не поняла, почему если после await asyncio.sleep(2) я напишу следующей строчкой input(), то программа просто завершится без запроса ввода ?

  • @user-zb5yz9dm2f

    @user-zb5yz9dm2f

    13 күн бұрын

    Потому что поток выполнения на await передаеься следующей корутине в цикле событий. Если в очереди нет других корутин, то main завершается, если вы в main не дождались выполнения корутины.

  • @sergeyvereshaghin2330
    @sergeyvereshaghin23302 ай бұрын

    Прочитал сначала как: разбор arduino)) думаю, что за приколы 😂

  • @paulkarkarin466
    @paulkarkarin4662 ай бұрын

    Можно было Semaphore упомянуть. Чтобы люди понимали, что корутина не резиновая. А многие API вообще не любят когда их реквестами досят по 100 запросов в секунду. Вернут 500 ошибку и будут сидеть. Вообще, скорее это и есть слабое место: ограничение серверов на забор/вставку данных. Хотел спросить про мультитрединг+асинхронность: можно ли их как-то совместить, чтобы по максимуму использовать возможности железа (в условиях питона)? На самом деле это просто праздный вопрос из любопытства, учитывая ограничения, о которых я написал в начале.

  • @sio8730

    @sio8730

    2 ай бұрын

    мультитрединг+асинхронность не даст по максимуму задействовать железо (ядра процессора), ответ в документации CPython (реализации интерпретатора на Си), если кратко то виной этому GIL. А вот связка мультипроцессинг+асинхронность позволит при грамотном построении программы очень неплохо нагрузить железо

  • @PythonRussian

    @PythonRussian

    2 ай бұрын

    чтобы железо по максимуму в дело пустить, это надо другой язык =) вот с питона 13 говорят ГИЛ уберут(опционально), соответственно даже простой многопоточки должно хватать, но это надо будет смотреть как оно в реале будет и я сомневаюсь что прямо все ядра процессора задействует.

  • @user-nz1nc1cu6i
    @user-nz1nc1cu6i2 ай бұрын

    ещё бы разбор асинхронщины в django 5

  • @PythonRussian

    @PythonRussian

    2 ай бұрын

    увы, этого точно не будет, я не использую джанго

  • @DeliriumOFF
    @DeliriumOFF2 ай бұрын

    c файлами тоже есть асинхронная работа?

  • @PythonRussian

    @PythonRussian

    2 ай бұрын

    на самом деле там есть сложности, по разному реализовано на разных ОС, потому скорее с файлами придется работать используя потоки, асинкио умеет запускать в отдельном потоку блокирующую задачу не мешая текущему циклу событий

  • @non5309

    @non5309

    2 ай бұрын

    есть

  • @Sizt
    @Sizt20 күн бұрын

    Не очень понятно, как получить выигрыш за счет asyncio, используя только стандартную библиотеку. На 0:38 обещали рассказать принцип работы, а он так и не был объяснен в видео :( Очень хотелось бы подобный пример.

  • @user-zb5yz9dm2f

    @user-zb5yz9dm2f

    13 күн бұрын

    Так в примерах и используется стандартная библиотека. Пересмотрите первую половину. В стандартной библиотеке есть синхронные функции и асинхронные. Как пример, пакеты asyncio, aiohttp. В корутинах надо с await использовать асинхронные.

  • @Sizt

    @Sizt

    12 күн бұрын

    aiohttp не стандартная.

  • @tenebris8800
    @tenebris8800Ай бұрын

    Кто знает как два лайка поставить???

  • @user-zx6fq1ig4h
    @user-zx6fq1ig4h23 күн бұрын

    Очень плохое объяснение асинхронности. Куча воды, мутные термины... Советую поискать другие источники, их полно!

  • @Hi-gjgruncdun
    @Hi-gjgruncdun22 күн бұрын

    Лайк подписка, очень доходчиво, спасибо

  • @mslq
    @mslq2 ай бұрын

    tkinter и прочие GUI ведь уже и есть асинхронка, или как она там называется - событийное выполнение, даже root.mainloop такой же. На ATmega ещё пишу на асме, у меня там своя ось, тоже все таймеры, и прочие элементы все в асинхронке работают, гарантированный проход всей программы 1 ms.

  • @PythonRussian

    @PythonRussian

    2 ай бұрын

    не готов по гуи ответить, у них могут быть и несколько потоков, но с той же логикой - главный поток обрабатывает отрисовку и клики, а в потоках-демонах все обрабатывается не замедляя главный и не мешая ему. Но опять же -не силен, не занимался, могу жестоко ошибиться.

  • @Nicktimes
    @Nicktimes2 ай бұрын

    Вопрос в момент усыпления корутины,когда ивент отлажывает эту корутину в список,и переключается на другую,Запросы в бд или на сайт выполняется уже?раз Ивент понял что в этой корутине пришел ответ от Бд либо от сайта,чутка поясните,эти запросы и ответы приходят в момент когда корутину убрали спать?

  • @PythonRussian

    @PythonRussian

    2 ай бұрын

    я просто не хотел усложнять объяснение, но вопрос верный задаете. По сути в момент авейта в ивент луп на самый верх кладется как раз корутина которую ждем(например запрос к сайту) она сразу начинает выполняться. И уже она (обычно это какая то библиотека типа аиохттп под капотом) делает запрос и так как ответ нужно ждать тоже объявляет авейт до момента прихода ответа. От нас это обычно скрыто особенностями реализации библиотек, потому что мы пользователи этих библиотек и нам не очень важно что конкретно они делают, главное понимать как с ними работать (авейты и т.п.). Но если вы сами хотите писать такие библиотеки то тут конечно без погружение в детали асинкио не обойтись.

  • @Nicktimes

    @Nicktimes

    2 ай бұрын

    @@PythonRussian спасибо за хорошее разьяснение...

  • @mslq
    @mslq2 ай бұрын

    Я всегда наступаю на грабли и что под капотом и на капоте, и много раз повторять надо чтобы усвоить.

Келесі