Основы Asyncio

  Рет қаралды 9,232

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

Пікірлер: 76
@IlyaErokhin-uv7vx
@IlyaErokhin-uv7vx Ай бұрын
Единственное видео, где автор смог понятным образом донести суть асинхронщины, к тому же прошелся ПОСТРОЧНО по коду расъяснив его в деталях, благодарю
@podgorniy.r
@podgorniy.r Ай бұрын
Только запустил и сразу понял, что это лучшее видео на данную тему из свежих материалов!
@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что тебе здесь непонятного?автор почти целый час разжовывал материал,не понял если то заново смотри и вникай,ты тупо на автопилоте посмотрел нихера не понял и клянчишь вторую зачем та часть
@user-im7if6ps3z
@user-im7if6ps3z Күн бұрын
Кратко и очень понятно, рекомендую!
@aradarbinyan312
@aradarbinyan312 22 күн бұрын
37:53 блин как же это в точку. У меня было ровно то что говорит автор, асинхронный телеграм бот а внутри него синхронные библиотеки. Вот прям один в один. Автору видео кстати респект за качественное видео! Это пока лучшее пояснение ассинхронисти в Python которое я видел. Продолжай в том же духе!
@user-oq9tu5rw9z
@user-oq9tu5rw9z 2 күн бұрын
Спасибо за контент! При поиске материалов по asyncio сразу нашел твое видео, но из-за непривлекательности заставки пропустил. После продолжительного чтения документации и статей на Хабре, понял, что нет понимания базы. Вернулся к твоему видео и все стало максимально понятно.
@PythonRussian
@PythonRussian 2 күн бұрын
ну ты чего -о книге по обложке судишь?))) да и заставку конкретно в 1 этом случае сгенерил ИИ, ты прям обидел нарождающийся скайнет =) По основам - очень хорошо, что понял и начал их осваивать, я сам в свое время забуксовал, потому что начал не с основ, а с синтаксиса, думал все очевидно.
@SemyonKalyakulin
@SemyonKalyakulin 2 ай бұрын
все четко по сути. Очень наглядно. Всем рекомендую ваш канал!)
@photo_graf_khv
@photo_graf_khv 9 күн бұрын
Отличное объяснение! Благодарю!
@ProficusLets
@ProficusLets Ай бұрын
Спасибо за такой объемный интересный и детальный гайд. Продолжай развивать канал!
@dilirink9222
@dilirink9222 Ай бұрын
спасибо! всегда было лень разобрать эту тему) тут за первые 20 минут прочухал как оно работает)
@otbephncb4458
@otbephncb4458 2 ай бұрын
Корутина засыпает, просыпается мафия)
@Mesedal
@Mesedal 2 ай бұрын
Большое спасибо за понятное объяснение!
@davidbibi3138
@davidbibi3138 2 ай бұрын
Спасибо за видеоурок :)
@alexeymatveev9031
@alexeymatveev9031 2 ай бұрын
Отлично, давно ждал, спасибо!
@user-ho8ve3kc4i
@user-ho8ve3kc4i Ай бұрын
спасибо большое, все очень доходчиво, интересно и очень полезно.
@SashaBorandi
@SashaBorandi 2 ай бұрын
Очень все разжевано, спасибо
@user-us6vw8yb9l
@user-us6vw8yb9l 2 ай бұрын
Еще не смотрела, лайк поставила. Потом зайду посмотрю))
@ngbaranov
@ngbaranov Ай бұрын
Очень хорошо, всё по полочкам, всё понятно
@blackark11
@blackark11 24 күн бұрын
Спасибо
@fragtv8163
@fragtv8163 21 күн бұрын
Просто гений, легенда объяснений. Я так счастлив не был давно😅
@PythonRussian
@PythonRussian 21 күн бұрын
удивлен что видео по асинке может вызвать такую реакцию, но рад
@alexgreen984
@alexgreen984 Ай бұрын
Спасибо, полезно
@Tonyjusttony
@Tonyjusttony Ай бұрын
Лучший! Спасибо.
@rayrayray4653
@rayrayray4653 2 ай бұрын
Четко!!!
@user-buser_eto_ja
@user-buser_eto_ja 2 ай бұрын
СПАСИБОООООО!!!
@denoxi
@denoxi 2 ай бұрын
Привет! Огромное спасибо за видео! А можно объединить многопоточность и Asyncio? Было бы здорово посмотреть твое видео с этим примером)
@PythonRussian
@PythonRussian 2 ай бұрын
идея хорошая, надо подумать - сделать ли это сразу или после процессов сразу и про потоки и про процессы.
@FarofWell
@FarofWell 2 ай бұрын
наконец то асинхронка
@tryhard114
@tryhard114 2 ай бұрын
Охх какая тема.. Автор бросил вызов решив взяться за Asyncio на своём канале с его стилем объяснения..но я посмотрю и запишу всё!
@lifestyletv139
@lifestyletv139 2 ай бұрын
Красава бро
@stevem4806
@stevem4806 2 ай бұрын
Здравствуйте, спасибо за видео! Только я не понял как правильно await‘ы ставить в асинхронных функциях?
@PythonRussian
@PythonRussian 2 ай бұрын
мы их ставим там, где нам нужно дождаться результата какой-либо корутины
@stevem4806
@stevem4806 2 ай бұрын
@@PythonRussian понял вас, спасибо!
@user-mobilnik
@user-mobilnik 2 ай бұрын
А будет такой же прекрасный урок по multiprocessing?
@PythonRussian
@PythonRussian 2 ай бұрын
будет, но попозже и не уверен, что прекрасный)
@stspartak
@stspartak 2 ай бұрын
The BEST!
@user-lo3xm2ff9w
@user-lo3xm2ff9w 2 ай бұрын
мужик!!!
@quasar-lv6pp
@quasar-lv6pp 2 ай бұрын
Один из крутейших русскоязычных каналов по python на ютубе! НО! (без критики, но о просьбе) Друже, сделай видос с практикой. Варианты разные: пишем чат, бот, магазин, игру в телеге...
@PythonRussian
@PythonRussian 2 ай бұрын
у меня на видео то времени нет почти, практика - это сложно, мало кому интересно будет, все же со своими желаниями и планами.
@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 ай бұрын
И еще раз спасибо. Твои видео - драгоценны!
@user-nu3ot7td1j
@user-nu3ot7td1j Ай бұрын
так и не поняла, почему если после await asyncio.sleep(2) я напишу следующей строчкой input(), то программа просто завершится без запроса ввода ?
@user-zb5yz9dm2f
@user-zb5yz9dm2f 15 күн бұрын
Потому что поток выполнения на 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 говорят ГИЛ уберут(опционально), соответственно даже простой многопоточки должно хватать, но это надо будет смотреть как оно в реале будет и я сомневаюсь что прямо все ядра процессора задействует.
@DeliriumOFF
@DeliriumOFF 2 ай бұрын
c файлами тоже есть асинхронная работа?
@PythonRussian
@PythonRussian 2 ай бұрын
на самом деле там есть сложности, по разному реализовано на разных ОС, потому скорее с файлами придется работать используя потоки, асинкио умеет запускать в отдельном потоку блокирующую задачу не мешая текущему циклу событий
@non5309
@non5309 2 ай бұрын
есть
@Sizt
@Sizt 22 күн бұрын
Не очень понятно, как получить выигрыш за счет asyncio, используя только стандартную библиотеку. На 0:38 обещали рассказать принцип работы, а он так и не был объяснен в видео :( Очень хотелось бы подобный пример.
@user-zb5yz9dm2f
@user-zb5yz9dm2f 15 күн бұрын
Так в примерах и используется стандартная библиотека. Пересмотрите первую половину. В стандартной библиотеке есть синхронные функции и асинхронные. Как пример, пакеты asyncio, aiohttp. В корутинах надо с await использовать асинхронные.
@Sizt
@Sizt 14 күн бұрын
aiohttp не стандартная.
@sergeyvereshaghin2330
@sergeyvereshaghin2330 2 ай бұрын
Прочитал сначала как: разбор arduino)) думаю, что за приколы 😂
@tenebris8800
@tenebris8800 Ай бұрын
Кто знает как два лайка поставить???
@eugenybobylev5438
@eugenybobylev5438 3 сағат бұрын
Сколько людей, только мнений. Мне не зашло, очень мутное объяснение
@PythonRussian
@PythonRussian 2 сағат бұрын
это нормально что не зашло, для того и есть инет - чтобы каждый находил то, что ему нравится
@user-zx6fq1ig4h
@user-zx6fq1ig4h 26 күн бұрын
Очень плохое объяснение асинхронности. Куча воды, мутные термины... Советую поискать другие источники, их полно!
@Hi-gjgruncdun
@Hi-gjgruncdun 25 күн бұрын
Лайк подписка, очень доходчиво, спасибо
@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
Рет қаралды 4 М.
where is the ball to play this?😳⚽
00:13
LOL
Рет қаралды 14 МЛН
Super sport🤯
00:15
Lexa_Merin
Рет қаралды 11 МЛН
Uma Ki Super Power To Dekho 😂
00:15
Uma Bai
Рет қаралды 57 МЛН
Intro to async Python | Writing a Web Crawler
14:23
mCoding
Рет қаралды 72 М.
Django-Ninja APIs - Modern API Development in Django
43:40
BugBytes
Рет қаралды 15 М.
Решаем тестовое задание на позицию junior python backend разработчик
21:18
𝐧𝐞𝐫𝐝𝐢𝐳𝐚𝐲-𝐜𝐨𝐝𝐞
Рет қаралды 10 М.
Asyncio in Python - Full Tutorial
24:59
Tech With Tim
Рет қаралды 39 М.
Learn Python's AsyncIO in 15 minutes
14:02
Indently
Рет қаралды 47 М.
where is the ball to play this?😳⚽
00:13
LOL
Рет қаралды 14 МЛН