Основы Asyncio

แชร์
ฝัง
  • เผยแพร่เมื่อ 24 ก.พ. 2024
  • В продолжение беседы о конкурентости и параллельности в 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-uv7vx 29 วันที่ผ่านมา +8

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

  • @danilfighter6179
    @danilfighter6179 2 หลายเดือนก่อน +16

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

    • @PythonRussian
      @PythonRussian  2 หลายเดือนก่อน +4

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

    • @danilfighter6179
      @danilfighter6179 2 หลายเดือนก่อน

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

    • @user-ed1hy3by5p
      @user-ed1hy3by5p 2 หลายเดือนก่อน +2

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

    • @user-buser_eto_ja
      @user-buser_eto_ja 2 หลายเดือนก่อน

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

    • @Nicktimes
      @Nicktimes 2 หลายเดือนก่อน

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

  • @podgorniy.r
    @podgorniy.r หลายเดือนก่อน +7

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

  • @aradarbinyan312
    @aradarbinyan312 19 วันที่ผ่านมา +1

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

  • @photo_graf_khv
    @photo_graf_khv 7 วันที่ผ่านมา

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

  • @otbephncb4458
    @otbephncb4458 2 หลายเดือนก่อน +7

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

  • @fragtv8163
    @fragtv8163 18 วันที่ผ่านมา

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

    • @PythonRussian
      @PythonRussian  18 วันที่ผ่านมา

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

  • @SemyonKalyakulin
    @SemyonKalyakulin 2 หลายเดือนก่อน +4

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

  • @dilirink9222
    @dilirink9222 หลายเดือนก่อน +1

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

  • @ProficusLets
    @ProficusLets หลายเดือนก่อน +1

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

  • @Mesedal
    @Mesedal 2 หลายเดือนก่อน

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

  • @blackark11
    @blackark11 21 วันที่ผ่านมา +1

    Спасибо

  • @davidbibi3138
    @davidbibi3138 2 หลายเดือนก่อน +1

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

  • @alexeymatveev9031
    @alexeymatveev9031 2 หลายเดือนก่อน

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

  • @user-us6vw8yb9l
    @user-us6vw8yb9l 2 หลายเดือนก่อน +1

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

  • @Tonyjusttony
    @Tonyjusttony หลายเดือนก่อน

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

  • @user-ho8ve3kc4i
    @user-ho8ve3kc4i 28 วันที่ผ่านมา

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

  • @ngbaranov
    @ngbaranov หลายเดือนก่อน

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

  • @SashaBorandi
    @SashaBorandi 2 หลายเดือนก่อน +3

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

  • @alexgreen984
    @alexgreen984 หลายเดือนก่อน +1

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

  • @rayrayray4653
    @rayrayray4653 2 หลายเดือนก่อน +1

    Четко!!!

  • @tryhard114
    @tryhard114 2 หลายเดือนก่อน

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

  • @FarofWell
    @FarofWell 2 หลายเดือนก่อน +2

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

  • @user-buser_eto_ja
    @user-buser_eto_ja 2 หลายเดือนก่อน

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

  • @stspartak
    @stspartak 2 หลายเดือนก่อน

    The BEST!

  • @denoxi
    @denoxi 2 หลายเดือนก่อน

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

    • @PythonRussian
      @PythonRussian  2 หลายเดือนก่อน

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

  • @lifestyletv139
    @lifestyletv139 2 หลายเดือนก่อน +2

    Красава бро

  • @quasar-lv6pp
    @quasar-lv6pp 2 หลายเดือนก่อน

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

    • @PythonRussian
      @PythonRussian  2 หลายเดือนก่อน

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

  • @user-lo3xm2ff9w
    @user-lo3xm2ff9w 2 หลายเดือนก่อน +1

    мужик!!!

  • @stevem4806
    @stevem4806 2 หลายเดือนก่อน

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

    • @PythonRussian
      @PythonRussian  2 หลายเดือนก่อน

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

    • @stevem4806
      @stevem4806 2 หลายเดือนก่อน

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

  • @user-mobilnik
    @user-mobilnik หลายเดือนก่อน +2

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

    • @PythonRussian
      @PythonRussian  หลายเดือนก่อน +1

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

  • @benben-fz2es
    @benben-fz2es 2 หลายเดือนก่อน

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

    • @PythonRussian
      @PythonRussian  2 หลายเดือนก่อน +1

      я большую часть вопроса вообще не понял, но ты не можешь авейтить что попало, только 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 12 วันที่ผ่านมา

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

  • @paulkarkarin466
    @paulkarkarin466 2 หลายเดือนก่อน

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

    • @sio8730
      @sio8730 2 หลายเดือนก่อน

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

    • @PythonRussian
      @PythonRussian  2 หลายเดือนก่อน

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

  • @user-nz1nc1cu6i
    @user-nz1nc1cu6i 2 หลายเดือนก่อน +1

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

    • @PythonRussian
      @PythonRussian  2 หลายเดือนก่อน

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

  • @DeliriumOFF
    @DeliriumOFF 2 หลายเดือนก่อน

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

    • @PythonRussian
      @PythonRussian  2 หลายเดือนก่อน

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

    • @non5309
      @non5309 2 หลายเดือนก่อน

      есть

  • @sergeyvereshaghin2330
    @sergeyvereshaghin2330 2 หลายเดือนก่อน +1

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

  • @Sizt
    @Sizt 19 วันที่ผ่านมา

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

    • @user-zb5yz9dm2f
      @user-zb5yz9dm2f 12 วันที่ผ่านมา

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

    • @Sizt
      @Sizt 12 วันที่ผ่านมา

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

  • @tenebris8800
    @tenebris8800 หลายเดือนก่อน

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

  • @user-zx6fq1ig4h
    @user-zx6fq1ig4h 23 วันที่ผ่านมา

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

  • @Hi-gjgruncdun
    @Hi-gjgruncdun 22 วันที่ผ่านมา

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

  • @mslq
    @mslq 2 หลายเดือนก่อน

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

    • @PythonRussian
      @PythonRussian  2 หลายเดือนก่อน +1

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

  • @Nicktimes
    @Nicktimes 2 หลายเดือนก่อน +1

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

    • @PythonRussian
      @PythonRussian  2 หลายเดือนก่อน

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

    • @Nicktimes
      @Nicktimes 2 หลายเดือนก่อน

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

  • @mslq
    @mslq 2 หลายเดือนก่อน +1

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