Тёмный

Основы асинхронности в Python #6: Корутины и yield from 

Oleg Molchanov
Подписаться 79 тыс.
Просмотров 59 тыс.
50% 1

Мои курсы:
Boosty:
boosty.to/omol...
Patreon:
/ karty-vsekh-41011404
Корутины, основанные на генераторах и конструкция yield from.
Передача данных и исключений внутрь генератора. Использование ключевого слова return у генераторов.
Делегирующий генератор и подгенератор. И вишенка на торте - конструкция yield from.
** ИСХОДНЫЙ КОД **
Основных проектов доступен в Patreon:
/ iskhodnyi-kod-26640469
***
🔷 Для донатов. Всегда очень признателен за это:
www.donational...
Весь плейлист:
Основы асинхронности в Python #1: Введение
• Основы асинхронности в...
Основы асинхронности в Python #2: Асинхронность с простыми функциями. Событийный цикл.
• Основы асинхронности в...
Основы асинхронности в Python #3: Асинхронность на колбэках.
• Основы асинхронности в...
Основы асинхронности в Python #4: Генераторы и событийный цикл Round Robin
• Основы асинхронности в...
Основы асинхронности в Python #5: Асинхронность на генераторах
• Основы асинхронности в...
Основы асинхронности в Python #6: Корутины и yield from
• Основы асинхронности в...
Основы асинхронности в Python #7: Asyncio, async/await
• Основы асинхронности в...
Связанные видео:
Декораторы на пальцах:
• Уроки Python casts #6 ...

Опубликовано:

 

24 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 116   
@zaemiel
@zaemiel 5 лет назад
Следующее видео будет посвящено asyncio, async/await и будет опубликовано в пятницу 21-го декабря.
@coffeecoder7368
@coffeecoder7368 5 лет назад
как раз, когда у моего молока срок годности выйдет
@gnativyuriy3110
@gnativyuriy3110 5 лет назад
@@coffeecoder7368 держи в курсе
@tarassavchenko2317
@tarassavchenko2317 4 года назад
Мало того,что асинхронность учу, так еще и корутины и сокеты начал,это просто прекрасная серия)
@ИванИванов-н9т9ъ
@ИванИванов-н9т9ъ 3 года назад
Жаль, что Олег куда-то пропал. Один из лучших.
@fenrier3848
@fenrier3848 2 года назад
Он не пропал, просто решил работать на западную аудиторию, либо просто так захотел. Вот это он ru-vid.comvideos
@ИванИванов-н9т9ъ
@ИванИванов-н9т9ъ 2 года назад
@@fenrier3848 Спасибо за ссылку, друг.
@Developer_python_
@Developer_python_ Год назад
@@fenrier3848 Are you sure?
@vadim1693
@vadim1693 5 лет назад
Спасибо, у вас лучшая подборка по асинхронности в питоне на русском языке из всех что я видел.
@zaemiel
@zaemiel 5 лет назад
Спасибо. Я старался.
@IvaNFallout
@IvaNFallout Год назад
Согласен, материал мегаполезный
@Максим-т5ш8и
@Максим-т5ш8и Год назад
Контент очень крутой, но сложно! Смотрю уже второй час с перемотками, идёт туго, но идёт. Спасибо!
@arkadiykvetnoy5786
@arkadiykvetnoy5786 4 года назад
11:10 блок else выполняется, если ни одного исключения не происходило. А среднее выводится не потому, что else выполняется, а потому что цикл, да, не прерывается, генератор продолжает выполняться, т.к. мы обрабатываем исключение. Т.е. во 2-м случае с BlablaExeption среднее не выводит, потому что в yield мы передаем None. Олег, большое спасибо, почти все у вас пересмотрел!
@brinza888
@brinza888 3 года назад
да я тоже заметил эту детальку с блоком else и возвратом среднего значения.
@ispan4eG
@ispan4eG 3 года назад
Какая польза от else? Этот print(message) можно с таким же успехом вставить и в конце блока try, и в после блока except.
@brinza888
@brinza888 3 года назад
@@ispan4eG принцип DRY тогда будет не соблюден.
@АртурЛагунов-ч6ъ
@АртурЛагунов-ч6ъ 2 года назад
Автору большущее спасибо, очень доступно объясняется сложная тема.
@MADAHAKO
@MADAHAKO 3 года назад
Очень красивый переход к тебе await! Я прямо аж такой "вааааау"
@ЕрвандАгаджанян-в3к
Олег Молчанов, ты просто гений!!!!!
@imgnl
@imgnl 5 лет назад
Спасибо, Олег!
@ntvisigoth
@ntvisigoth 2 года назад
Отличнейший цикл. Никогда бы не подумал, что в корутинах можно делать return и потом по StopIteration вовзращать значение. Еще более глубже узнаю Python
@alexander.kochkarev
@alexander.kochkarev 3 года назад
Спасибо! Замечательные уроки. Стиль повествования как затягивающий детектив :)
@nonpiramid
@nonpiramid 3 года назад
Одно из полезнейших видео, просмотренных мной в жизни
@ОлегКлименко-с4щ
Действительно очень доступная и понятная серия. Очень многие моменты прояснились в логике работы. Спасибо, Вам, Олег!
@igorkulibaba7287
@igorkulibaba7287 5 лет назад
Отличное разъяснение. Всё чётко. От души спсибо.
@MrThrash90
@MrThrash90 2 года назад
Уроки просто бомба!
@Cenzor84
@Cenzor84 4 года назад
Как всё по полочкам разложил, респект! Не сухой академический текст, а всё на пальцах, хороша подача материала!
@gnompirogov9259
@gnompirogov9259 2 года назад
Олег, спасибо за поучительное видео!!!!!
@Прилуки_Класичні
@Прилуки_Класичні 3 года назад
Большое спасибо, все очень доходчиво объяснили!
@MrSvavka
@MrSvavka 4 года назад
Классная серия. Огромное спасибо автору.
@KikrAzz
@KikrAzz Год назад
Спасибо, Олег! Очень хороший материал!
@TheEBPO
@TheEBPO 20 дней назад
Сложно было для понимания... Но пересмотреть пару раз и все ок. Спасибо!
@IlyaLeontyev
@IlyaLeontyev Год назад
Видео - пушка!
@Michael201078
@Michael201078 4 года назад
Спасибо за труды. Вы очень хорошо подвели идеологию асинхронности под понимание методов async/await
@stepankokovin7841
@stepankokovin7841 Год назад
Мы получили ЭТО, оно работает! )))))
@LSE13
@LSE13 5 лет назад
Респект за видео! Понять только не могу, как можно записывать контент таким бодрячком в 7-8 утра?
@romanchikusan
@romanchikusan 4 года назад
Хаха, это точно
@АльбертИванов-ц4х
без практических примеров тяжко. 3-и первых видео еще тянул, теперь все, поплыл...
@rayhunter7635
@rayhunter7635 4 года назад
для тех, кто еще почитает(вы то за 6 месяцев разобрались:) ) В этом курсе основ асинхронности именно что показана история развития асинхронности в питоне. Т.е. у людей ставилась проблема, они её решали, придумав асинхронность в этом виде(хотя это скорее конкурентное программирование), а затем язык обновлялся с убиранием всего неудобного под уровни абстракции. Всё это хоть и использовали раньше, но сейчас дошли до async/await, которая является основной в применении. Поэтому нет особого смысла давать в объяснениях примеры на том, что сейчас является промежуточным звеном. Применение стоит искать именно с применениями конструкции async/await. И можно подобное почитать тут, для закрепления что и зачем: sohabr.net/habr/post/359018/
@farrukhmuratov5042
@farrukhmuratov5042 4 года назад
@@rayhunter7635 после ваших слов нужно ставить жирную точку)
@victoriacare6156
@victoriacare6156 4 года назад
я тоже, все не понятнее становиться(
@sergiophilippov3321
@sergiophilippov3321 3 года назад
@@victoriacare6156 автор не понял просто как уплыл в облака, это слабость его как лектора, не учится у американских хороших лекторов, свое лепечет...сперва завлекает тратишь время 3 часа личного, а потом в небеса...как бесят
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 2 года назад
@@rayhunter7635 а есть статья на другом сайте? ссылка не рабочая
@АлександрА-к1г1ц
@АлександрА-к1г1ц 5 лет назад
Смотреть было интересно, но где это применяется? Можно хотя бы тройку примеров.
@MegaExstaz
@MegaExstaz 5 лет назад
Это серия видео о работе асинхронного кода в целом. На практике обычно используют async/await, но это просто абстракция над той логикой которая описывается в уроках 1-6.
@sergeys4732
@sergeys4732 4 года назад
@@xTatsuran бот в дискорде работает с применением самого верхнего уровня абстракции async/await, но никак не на этом способе отражённом в видео
@pfk9025
@pfk9025 2 года назад
Очень круто!! Генераторы жесть....
@КонстантинИбрагимов-т3в
Олег мозг! Спасибо.
@dv-key
@dv-key 4 года назад
Почему на 26:38 вы меняете BlaBlaException на StopIteration? У меня строка "Returned from subgen" возвращается в любом случае - и если ловить StopIteration и если BlaBlaException. То есть я так понял, что в subgen() ловится исключение, выполняется оператор break и исполнение программы переходит к return, независимо от того как называется исключение.
@brinza888
@brinza888 3 года назад
Олег, очевидно, ошибся. Менять в subgen не обязательно, можно ловить и BlaBlaException, ведь тот except необходим лишь для вызова оператора break и выхода из цикла. А вот когда выполнится return тогда будет создано новое исключение StopIteration (создано оно будет интерпретатором), в объекте которого и будет содержатся поле value c возвращаемым значением.
@djangodev3191
@djangodev3191 2 года назад
@@brinza888 Я если честно не могу пока что все это связать с работой асинхронности в питоне. Допустим в строке кода "await asycnio.sleep(5)" - await это yeld from, а метод sleep это подгенератор. Как этот метод отрабатывает внутри. Как это все работает.
@brinza888
@brinza888 2 года назад
@@djangodev3191 вообще для работы с асинхронностью достаточно понимания самой концепции и на чём это основано. Разбирать каждую функцию не обязательно ведь, главное - её результат и общее знание "что и зачем". Если есть желание (интерес) узнать, как именно работает та или иная функция из стандартной библиотеки, можно обратится к исходникам.
@user.abuser
@user.abuser Год назад
@@djangodev3191 он будет ждать пока не будет получен объект StopIteration. StopIteration возникнет после того, как подгенератор отдаст все значения из 5, то есть подождет 5 секунд и прервет итерацию.
@yusupovjasur
@yusupovjasur 5 лет назад
Ну это же взрыв мозга!
@MrAlexT92
@MrAlexT92 3 года назад
Очень круто!
@homus32
@homus32 4 года назад
Вот тут мое познание уже все. Я ничего не понял... Кек. Буду пересматривать 5 раз...
@homus32
@homus32 4 года назад
Мое понимание завершено на 30%
@homus32
@homus32 4 года назад
Мое понимание 60%
@homus32
@homus32 4 года назад
Мое понимание 💯%
@homus32
@homus32 4 года назад
Я понял
@ВикторГамбино
@ВикторГамбино 4 года назад
ура!! увидел как работает return в генераторах!!! Это круто !!! странно, что так мало лайков, лучшие уроки по питону на русском языке!!
@MrVadymUA
@MrVadymUA 3 года назад
пытаюсь вкатиться с ПХП и оказывается жесть сложно) спасибо
@ВячеславЖуравский-р4б
Олежа, давай возвращайся, не выдумывай!
@keepsilence6843
@keepsilence6843 5 лет назад
Олег, а в чем разница между "отдали" и "вернули"? "Отдали" - это только в процессе работы генератора? А чем оно тогда отличается от "вернули"?
@КириллИнякин-т9ы
@КириллИнякин-т9ы 4 года назад
Год прошел конечно, но отвечу, в случае если ты возвращаешь значение, то работа в функции полностью прекращается, в отличии от генератора, где с помощью yield ты отдаешь значение и 'замораживаешь' работу генератора.
@НиколайКочкин-в8с
Класс👍
@sergberozkin7522
@sergberozkin7522 5 лет назад
Будет ли равносильно, если вместо g.send(None) инициализировать генератор next(g) ? Или есть нюансы?
@zaemiel
@zaemiel 5 лет назад
все равно, и так и так можно.
@david_shiko
@david_shiko 4 года назад
Шикарная подача! Где задонатить? Обычно у ютуба есть кнопка спонсировать ) p.s. звук капельку громче не помешало бы. А то даже штатных динамиков ноутбука не хватает, слушаю через колонку :(
@mishkasensei
@mishkasensei 3 года назад
ссылка в описание *да да я знаю, что прошло 4 месяца*
@ДмитрийН-т1ц
@ДмитрийН-т1ц 5 лет назад
Олдфаги тут? на месте!
@АндрейД-й3ч
@АндрейД-й3ч 4 года назад
Добрый день Олег! Прокомментируйте, пожалуйста, почему на 11:29 вы говорите, что в случае выхода из while попадем в обработчик StopIteration и увидим ('done'). По выходу из while необходимо отлавливать StopIteration в блоке, который бросает исключение, а не в самом генераторе. StopIteration самого генератора не отлавливаются внутри него. Или я не так понял?
@sainco3036
@sainco3036 5 лет назад
Спасибо
@nontuko
@nontuko 5 лет назад
На 26:35 BlaBlaException меняется на StopIteration. На самом деле это не обязательно и можно было кинуть BlaBlaException (т.к. в его обработке есть break и в итоге StopIteration вызвался после return в subgen). Вообще и в предыдущем уроке была, как мне кажется, путаница с StopIteration. StopIteration кидается сам после return генератора. Либо Вы имели ввиду что-то другое и я не понял задумки.
@zaemiel
@zaemiel 5 лет назад
говорил же в этом видео о том, что возвращаемое значение идет через StopIteration. Т.е. да, return - прерывает генератор через StopIteration.
@current1710
@current1710 4 года назад
@@zaemiel Теперь понятно, думал зачем нам внешний except StopIteration если отработает внутренний.
@rayhunter7635
@rayhunter7635 4 года назад
Начиная с 3.3 атрибут value содержит «прикрепленное значение». В него помещается значение из аргумента, переданного в инициализатор (по умолчанию - None). После возврата из функции генератора/сопрограммы создаётся экземпляр данного исключения, в инициализатор которого передаётся значение, возвращаемое упомянутой функцией. Ошибки бывают разные, черные/белые/красные)
@kain5330
@kain5330 5 лет назад
Пора на патреон)
@dmitrylitvin2955
@dmitrylitvin2955 4 года назад
А что значит, касательно selectors и select, что они возвращают готовые объекты? Как они понимают, что этот объект готов для записи/чтения?
@kozlovsky5692
@kozlovsky5692 5 лет назад
класс
@artem88able
@artem88able 3 года назад
Олег, привет! Сделай видео, как построчно прочитать файл и вернуть каждую строку с помощью yield
@МаксимАнатольевич-ь6х
def get_lines_generator(file): with open(file, 'rt') as f: return (line for line in f) #тоже самое def get_lines_generator(file): with open(file, 'rt') as f: for line in f: yield line
@timtimbot
@timtimbot 4 года назад
на 22:00 не совсем понял почему мы провалились по генератору дальше (до print('.....', message)). Ведь на первом йилде должны были остановиться?
@rayhunter7635
@rayhunter7635 4 года назад
ну так он объяснял, что вначале генератор в состоянии "только создан". Чтобы его использовать нужно "g.send(None)" отправить. Или next(g). Тогда генератор переходит на первый yield и становится готовым к использованию. И всё это действо он убрал в написанный на видео для этих целей декоратор @coroutine
@v_adimvadi_m6722
@v_adimvadi_m6722 4 года назад
18:25 "теперь мы будем писaть вызывающий код, так называемый, caller..." А исполняемый как тогда назвать, кроме "скрипт" ? executer? performer?
@cyber-paddle
@cyber-paddle 5 лет назад
Anki forewer!
@rayder6167
@rayder6167 3 года назад
11:30 Но else в try выполнится только в том случае если try выполнился без ошибок
@brinza888
@brinza888 3 года назад
Порядок при исполнении конструкции a=yield b такой: 1) Возврат not None значения b 2) Пауза и ожидание методов .send или .throw 3) Присвоение переданного в .send значения к переменной a. Или raise исключения переданного в .throw В случае на 11:00 - 11:30 получилось следующее. В первый раз при .throw после обработки исключения мы пропустили блок else (ведь он правда не исполняется если была ошибка), затем мы вернулись к пункту 1 (см схему выше) и вернули текущее значение average, ведь оно было не None. Во второй раз Олег не вызвал ни разу .send, и при вызове .throw мы обработали исключение и ничего не вернули, потому что average содержало None.
@aimexe6583
@aimexe6583 5 лет назад
как с тобой можно связаться?
@victoriacare6156
@victoriacare6156 4 года назад
не понимаюююю(
@ЕвгенийЧан-ф2з
@ЕвгенийЧан-ф2з Год назад
Сложновато)
@АндрейЧеремисин-щ7к
автор конечно молодец, преподает материал очень хорошо, но когда видишь в названии серии видео "основы асинхронности", ожидаешь преобладающее обьяснение об асинхронности, а не о генераторах и прочих темах, мне кажется, что можно было обьяснить все на много проще
@DRanduletti
@DRanduletti 2 года назад
уже n раз автор писал об этом. Вообще то что callbackи что генераторы как раз и позволяют написать асинхронный код. Про что и рассказывается. Хочешь короче и проще -> хаудиХо
@АндрейЧеремисин-щ7к
@@DRanduletti Потом все понял, сейчас так не думаю, боже упаси только не хауди хо
@guci_viola
@guci_viola 2 года назад
Ж-Ж ж
@mikodev2437
@mikodev2437 2 года назад
Много воды
@sergiophilippov3321
@sergiophilippov3321 3 года назад
очень плохо составлена лекция, куда улетать то, посмотрите видео американских лекторов как они хорошо объясняют, а тут одно разочарование: слова смешно употребляет, когда мне уже не смешно...я тут 350 тысяч отдал и год ждал пока объяснять будут, но не было, и этот такой же...если преподаете, то делайте это нормально, а не так, что основы понятны, и потом как взлетает, и не объясняет нормально...к примеру, я открыл Яндекс и вбил что такое yield и первое, что мне попалось, что это аналог return , ждал что это скажет хоть раз, нет не сказал...ну б...я , зла не хватает, не надо петь тут ему дифирамбы, а то этот суп будем постоянно кушать
@kit4unez
@kit4unez 3 года назад
К сожалению проблема не в лекторе, а в таких слушателях. Хоть миллион отдадите - не поймете что такое асинхронность, если не хотите головой думать.
@sergiophilippov3321
@sergiophilippov3321 3 года назад
@@kit4unez да такие люди везде есть, вы и отодвигаете прогресс, это как говорить школьнику ты сам думай, а не учитель....прежде чем писать чужие мысли сперва думайте
@kit4unez
@kit4unez 3 года назад
@@sergiophilippov3321 ясно. Если не понятно - послушайте David Beazley в оригинале, если и это не понравится, то есть повод задуматься
@sergiophilippov3321
@sergiophilippov3321 3 года назад
@@kit4unez прочитайте про 350 тыс выше, если и это не поймете, то есть повод задуматься
@НикФьюри-ы3ш
@НикФьюри-ы3ш 3 года назад
Я не понял, ты ему заплатил 350к и целый год ждал серию лекций по асинхронному программированию? Если да, то в следующий раз не трать так много времени и денег, попроси кого-нибудь, чтоб скачали тебе книжку из интернета по нужной тематике или видео в ютьюб нашли. Мотивации 10к накинешь от желающих отбоя не будет. Как вариант можешь сам скачать/найти, уверен за год справишься и даже прочитать успеешь.
@xxxbunx
@xxxbunx 3 года назад
Да уж.... Рехнуться можно...
@boobubuo
@boobubuo 5 лет назад
нафига ты елсе в трай ексепт юзаешь ? объясни сей великий замут !? лол ..
@zaemiel
@zaemiel 5 лет назад
И тебя с Новым годом, родной. Все-таки осталось всего ничего - каких-то жалких 5 часов. Желаю тебе в следующем году не нахватать слишком много троек. И чтобы на ЕГЭ ты не особо волновался и чтобы оно прошло нормально.
@boobubuo
@boobubuo 5 лет назад
​@@zaemiel понятно .. съехал .. с темы. либо стремаешься .. либо действительно смысла нет .. в этой конструкции ..
@zaemiel
@zaemiel 5 лет назад
Дружочек, я с темы не съехал. Я-то знаю в каких условиях срабатывает else в блоках try... except, а вот ты - этого не знаешь. Вот и ответь на этот вопрос себе сам. Иногда можно и без else, иногда else просто нужен - зависит от ситуации.
@temamart-k
@temamart-k 5 лет назад
@@zaemiel люди вкрай обленились, что тут говорить о документации, если даже загуглить лень, вопрос с try, except, else, finally гуглится по первой же ссылке. И вообще не понятно, как можно пытаться понять генераторы, если try, except это уже считается великим замутом?
@TeppopucT
@TeppopucT 5 лет назад
else прикольная тема Его можно использовать после for, while, try-except, возможно где-то еще Исполняется он в for и while всегда, если не было break. В конструкции try-except - если не было исключения (try завершился успешно). Это очень удобно и позволяет избежать использования ненужных флагов. Без else можно обойтись, но порой гораздо удобнее использовать.
Далее
🌭 BBQ Chili Dog Skillet #Shorts
00:36
Просмотров 3,2 млн
Ozoda - Lada (Official Music Video)
06:07
Просмотров 7 млн
Основы Asyncio
53:25
Просмотров 20 тыс.
🌭 BBQ Chili Dog Skillet #Shorts
00:36
Просмотров 3,2 млн