Основы Asyncio

  Переглядів 8,457

Python Russian

Python Russian

2 місяці тому

В продолжение беседы о конкурентости и параллельности в 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 23 дні тому
Единственное видео, где автор смог понятным образом донести суть асинхронщины, к тому же прошелся ПОСТРОЧНО по коду расъяснив его в деталях, благодарю
@danilfighter6179
@danilfighter6179 2 місяці тому
Очень жду вторую часть. Спасибо большое за такой информативный и самое главное - бесплатный контент. Ты лучший!
@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
@aradarbinyan312 13 днів тому
37:53 блин как же это в точку. У меня было ровно то что говорит автор, асинхронный телеграм бот а внутри него синхронные библиотеки. Вот прям один в один. Автору видео кстати респект за качественное видео! Это пока лучшее пояснение ассинхронисти в Python которое я видел. Продолжай в том же духе!
@podgorniy.r
@podgorniy.r Місяць тому
Только запустил и сразу понял, что это лучшее видео на данную тему из свежих материалов!
@SemyonKalyakulin
@SemyonKalyakulin 2 місяці тому
все четко по сути. Очень наглядно. Всем рекомендую ваш канал!)
@photo_graf_khv
@photo_graf_khv 20 годин тому
Отличное объяснение! Благодарю!
@dilirink9222
@dilirink9222 Місяць тому
спасибо! всегда было лень разобрать эту тему) тут за первые 20 минут прочухал как оно работает)
@ProficusLets
@ProficusLets Місяць тому
Спасибо за такой объемный интересный и детальный гайд. Продолжай развивать канал!
@fragtv8163
@fragtv8163 12 днів тому
Просто гений, легенда объяснений. Я так счастлив не был давно😅
@PythonRussian
@PythonRussian 12 днів тому
удивлен что видео по асинке может вызвать такую реакцию, но рад
@otbephncb4458
@otbephncb4458 2 місяці тому
Корутина засыпает, просыпается мафия)
@Mesedal
@Mesedal 2 місяці тому
Большое спасибо за понятное объяснение!
@davidbibi3138
@davidbibi3138 2 місяці тому
Спасибо за видеоурок :)
@alexeymatveev9031
@alexeymatveev9031 2 місяці тому
Отлично, давно ждал, спасибо!
@user-us6vw8yb9l
@user-us6vw8yb9l 2 місяці тому
Еще не смотрела, лайк поставила. Потом зайду посмотрю))
@ngbaranov
@ngbaranov Місяць тому
Очень хорошо, всё по полочкам, всё понятно
@user-ho8ve3kc4i
@user-ho8ve3kc4i 22 дні тому
спасибо большое, все очень доходчиво, интересно и очень полезно.
@SashaBorandi
@SashaBorandi 2 місяці тому
Очень все разжевано, спасибо
@Tonyjusttony
@Tonyjusttony 27 днів тому
Лучший! Спасибо.
@alexgreen984
@alexgreen984 Місяць тому
Спасибо, полезно
@blackark11
@blackark11 15 днів тому
Спасибо
@rayrayray4653
@rayrayray4653 2 місяці тому
Четко!!!
@user-buser_eto_ja
@user-buser_eto_ja 2 місяці тому
СПАСИБОООООО!!!
@lifestyletv139
@lifestyletv139 2 місяці тому
Красава бро
@stspartak
@stspartak 2 місяці тому
The BEST!
@FarofWell
@FarofWell 2 місяці тому
наконец то асинхронка
@denoxi
@denoxi 2 місяці тому
Привет! Огромное спасибо за видео! А можно объединить многопоточность и Asyncio? Было бы здорово посмотреть твое видео с этим примером)
@PythonRussian
@PythonRussian 2 місяці тому
идея хорошая, надо подумать - сделать ли это сразу или после процессов сразу и про потоки и про процессы.
@tryhard114
@tryhard114 2 місяці тому
Охх какая тема.. Автор бросил вызов решив взяться за Asyncio на своём канале с его стилем объяснения..но я посмотрю и запишу всё!
@user-mobilnik
@user-mobilnik Місяць тому
А будет такой же прекрасный урок по multiprocessing?
@PythonRussian
@PythonRussian Місяць тому
будет, но попозже и не уверен, что прекрасный)
@user-lo3xm2ff9w
@user-lo3xm2ff9w 2 місяці тому
мужик!!!
@stevem4806
@stevem4806 2 місяці тому
Здравствуйте, спасибо за видео! Только я не понял как правильно await‘ы ставить в асинхронных функциях?
@PythonRussian
@PythonRussian 2 місяці тому
мы их ставим там, где нам нужно дождаться результата какой-либо корутины
@stevem4806
@stevem4806 2 місяці тому
@@PythonRussian понял вас, спасибо!
@benben-fz2es
@benben-fz2es 2 місяці тому
один момент не уяснил - если авейтить простой вызов (например, несинхронный реквест), оно ждет? или ей и увнутре тоже надо помечаться = иметь переписанную под асинкайо библиотеку. попробую вечером покатать. например - поставить обычный sleep. засада если нет - если наследовал классы из стандартных не-асинхронных, придется слегка переписывать, рефактора может и не хватить.
@PythonRussian
@PythonRussian 2 місяці тому
я большую часть вопроса вообще не понял, но ты не можешь авейтить что попало, только Awaitable объекты то есть корутины, таски и так далее, несинхронный реквест не будет авейтится -упадет ошибка.
@benben-fz2es
@benben-fz2es 2 місяці тому
@@PythonRussian именно это я и спрашивал. Корутины, использующие неасинкио айо запросы. Ошибка. Понял. Значит, приватное айо через потоки.
@benben-fz2es
@benben-fz2es 2 місяці тому
Поправь, правильно ли я понял. если очень грубо: в отличие от многопоточности, где у тебя в питоне есть свой скедулер раздавать кванты времени любому типу кода, используем почти прямые систем коллы, и полагаемся на операционку для таск свитча. То есть если авейтить *свой* код, а не неприкрытые систем коллы из асинкио, то некому скедулить, потому что операционка не умеет свитчить арбитрарные/приватные куски кода. Логично. Но, конечно, костылик такой себе - убрать свой скедулер в пользу операционки *через ТАКОЕ*. Выигрыш - в убирании оверхеда своего скедулера, проигрыш - сужение применения: только системколлы. Да и синтаксис немного напрягает: киворды - доступны, а механика за ними - только после импорта асинкио.
@benben-fz2es
@benben-fz2es 2 місяці тому
И еще раз спасибо. Твои видео - драгоценны!
@quasar-lv6pp
@quasar-lv6pp 2 місяці тому
Один из крутейших русскоязычных каналов по python на ютубе! НО! (без критики, но о просьбе) Друже, сделай видос с практикой. Варианты разные: пишем чат, бот, магазин, игру в телеге...
@PythonRussian
@PythonRussian 2 місяці тому
у меня на видео то времени нет почти, практика - это сложно, мало кому интересно будет, все же со своими желаниями и планами.
@user-nu3ot7td1j
@user-nu3ot7td1j 23 дні тому
так и не поняла, почему если после await asyncio.sleep(2) я напишу следующей строчкой input(), то программа просто завершится без запроса ввода ?
@user-zb5yz9dm2f
@user-zb5yz9dm2f 6 днів тому
Потому что поток выполнения на await передаеься следующей корутине в цикле событий. Если в очереди нет других корутин, то main завершается, если вы в main не дождались выполнения корутины.
@user-nz1nc1cu6i
@user-nz1nc1cu6i 2 місяці тому
ещё бы разбор асинхронщины в django 5
@PythonRussian
@PythonRussian 2 місяці тому
увы, этого точно не будет, я не использую джанго
@paulkarkarin466
@paulkarkarin466 2 місяці тому
Можно было Semaphore упомянуть. Чтобы люди понимали, что корутина не резиновая. А многие API вообще не любят когда их реквестами досят по 100 запросов в секунду. Вернут 500 ошибку и будут сидеть. Вообще, скорее это и есть слабое место: ограничение серверов на забор/вставку данных. Хотел спросить про мультитрединг+асинхронность: можно ли их как-то совместить, чтобы по максимуму использовать возможности железа (в условиях питона)? На самом деле это просто праздный вопрос из любопытства, учитывая ограничения, о которых я написал в начале.
@sio8730
@sio8730 2 місяці тому
мультитрединг+асинхронность не даст по максимуму задействовать железо (ядра процессора), ответ в документации CPython (реализации интерпретатора на Си), если кратко то виной этому GIL. А вот связка мультипроцессинг+асинхронность позволит при грамотном построении программы очень неплохо нагрузить железо
@PythonRussian
@PythonRussian 2 місяці тому
чтобы железо по максимуму в дело пустить, это надо другой язык =) вот с питона 13 говорят ГИЛ уберут(опционально), соответственно даже простой многопоточки должно хватать, но это надо будет смотреть как оно в реале будет и я сомневаюсь что прямо все ядра процессора задействует.
@sergeyvereshaghin2330
@sergeyvereshaghin2330 2 місяці тому
Прочитал сначала как: разбор arduino)) думаю, что за приколы 😂
@DeliriumOFF
@DeliriumOFF 2 місяці тому
c файлами тоже есть асинхронная работа?
@PythonRussian
@PythonRussian 2 місяці тому
на самом деле там есть сложности, по разному реализовано на разных ОС, потому скорее с файлами придется работать используя потоки, асинкио умеет запускать в отдельном потоку блокирующую задачу не мешая текущему циклу событий
@non5309
@non5309 2 місяці тому
есть
@Sizt
@Sizt 13 днів тому
Не очень понятно, как получить выигрыш за счет asyncio, используя только стандартную библиотеку. На 0:38 обещали рассказать принцип работы, а он так и не был объяснен в видео :( Очень хотелось бы подобный пример.
@user-zb5yz9dm2f
@user-zb5yz9dm2f 6 днів тому
Так в примерах и используется стандартная библиотека. Пересмотрите первую половину. В стандартной библиотеке есть синхронные функции и асинхронные. Как пример, пакеты asyncio, aiohttp. В корутинах надо с await использовать асинхронные.
@Sizt
@Sizt 5 днів тому
aiohttp не стандартная.
@tenebris8800
@tenebris8800 29 днів тому
Кто знает как два лайка поставить???
@user-zx6fq1ig4h
@user-zx6fq1ig4h 16 днів тому
Очень плохое объяснение асинхронности. Куча воды, мутные термины... Советую поискать другие источники, их полно!
@Hi-gjgruncdun
@Hi-gjgruncdun 16 днів тому
Лайк подписка, очень доходчиво, спасибо
@mslq
@mslq 2 місяці тому
tkinter и прочие GUI ведь уже и есть асинхронка, или как она там называется - событийное выполнение, даже root.mainloop такой же. На ATmega ещё пишу на асме, у меня там своя ось, тоже все таймеры, и прочие элементы все в асинхронке работают, гарантированный проход всей программы 1 ms.
@PythonRussian
@PythonRussian 2 місяці тому
не готов по гуи ответить, у них могут быть и несколько потоков, но с той же логикой - главный поток обрабатывает отрисовку и клики, а в потоках-демонах все обрабатывается не замедляя главный и не мешая ему. Но опять же -не силен, не занимался, могу жестоко ошибиться.
@Nicktimes
@Nicktimes 2 місяці тому
Вопрос в момент усыпления корутины,когда ивент отлажывает эту корутину в список,и переключается на другую,Запросы в бд или на сайт выполняется уже?раз Ивент понял что в этой корутине пришел ответ от Бд либо от сайта,чутка поясните,эти запросы и ответы приходят в момент когда корутину убрали спать?
@PythonRussian
@PythonRussian 2 місяці тому
я просто не хотел усложнять объяснение, но вопрос верный задаете. По сути в момент авейта в ивент луп на самый верх кладется как раз корутина которую ждем(например запрос к сайту) она сразу начинает выполняться. И уже она (обычно это какая то библиотека типа аиохттп под капотом) делает запрос и так как ответ нужно ждать тоже объявляет авейт до момента прихода ответа. От нас это обычно скрыто особенностями реализации библиотек, потому что мы пользователи этих библиотек и нам не очень важно что конкретно они делают, главное понимать как с ними работать (авейты и т.п.). Но если вы сами хотите писать такие библиотеки то тут конечно без погружение в детали асинкио не обойтись.
@Nicktimes
@Nicktimes 2 місяці тому
@@PythonRussian спасибо за хорошее разьяснение...
@mslq
@mslq 2 місяці тому
Я всегда наступаю на грабли и что под капотом и на капоте, и много раз повторять надо чтобы усвоить.
Основы многопоточности в Python
58:46
Python Russian
Переглядів 3,7 тис.
Мы играли всей семьей
00:27
Даша Боровик
Переглядів 3,4 млн
Python 4: первые впечатления
24:35
Python Russian
Переглядів 11 тис.
ASYNCIO НА ПРАКТИЧЕСКОМ ПРИМЕРЕ
22:44
luchanos
Переглядів 26 тис.
ТРИЗ - инструмент решения задач, которые представляются нерешаемыми.
23:22
Асинхронное программирование на примере Python / asyncio
1:21:19
Менеджмент разработки ПО
Переглядів 9 тис.
Собеседование на позицию Senior Python Developer 5000$ #12
21:18
Python собеседования
Переглядів 2,1 тис.
Asyncio in Python - Full Tutorial
24:59
Tech With Tim
Переглядів 35 тис.
Конкурентность и параллельность
40:31
Python Russian
Переглядів 4,7 тис.