Основы асинхронности в Python #8: опять про генераторы

Поделиться
HTML-код
  • Опубликовано: 14 ноя 2024

Комментарии • 84

  • @e11mir
    @e11mir 5 лет назад +58

    Как всегда кратко и понятно) Спасибо за урок!) Благодаря именно этим урокам я смог устроиться на работу на позицию мидла решив их тестовое задание реализации клиент-сервер приложения) Я сейчас асинхронку понимаю очень хорошо благодаря вам)

    • @zaemiel
      @zaemiel  5 лет назад +33

      Ха-Ха! Это здорово! Очень за вас рад на самом деле. И рад, что мои усилия кому-то помогают.

    • @andreysemenov7717
      @andreysemenov7717 5 лет назад

      @@zaemiel нет уроков про пайкут
      сделайте плиз

    • @AJIagguH
      @AJIagguH 3 года назад

      На мидла? Пойду тогда по собесам ходить, пора остановить учебу)

    • @Biongar
      @Biongar 2 года назад

      @@zaemiel Олег, здравствуйте, подскажите пожалуйста, будет ли реализация из 1-го урока на async await?

    • @ДианаАимбетова-и6м
      @ДианаАимбетова-и6м Год назад +1

      А я сегодня благодаря этим урокам на работе оптимизировала систему которая собирает информацию из разных ресурсов для дальнейшего анализа переписав ее чтобы она работала асинхронно и именно ваши видео дали мне основное понимание и так сказать вдохновили, но я изначально не для этого смотрела ваш курс просто было интересно потом посмотрела и подумала надо где то применить и придумала😊 спасибо вам Олег!

  • @РоманОрлов-м7й
    @РоманОрлов-м7й 4 года назад +4

    Олег - человек которого хочется назвать преподавателем или специалистом, а не блогером

  • @oleksandrkovtunov487
    @oleksandrkovtunov487 3 года назад +2

    Видно, что Олег - профессионал, который разбирается в том, что говорит до мелочей: понимает как устроена асинхронность, какой она была, как с ней работать. Рекомендую.

  • @MrPelmewka
    @MrPelmewka 5 лет назад +26

    Здравствуйте, Олег! Очень ждем от вас серию видео о многопоточности, многопроцессности (thread, threading, multiprocessing) в Python)

    • @6E3KOMAPOB
      @6E3KOMAPOB 4 года назад

      @@xTatsuran multiprocessing вполне себе обходит GIL

    • @Bandera_tut
      @Bandera_tut 4 года назад

      @@6E3KOMAPOBпроцессы в пайтоне не обходят GIL, просто в каждом процессе будет свой GIL и это никак не будет влиять на параллелизм, но и юзать процессы изза "обхода GIL" направо-налево не стоит, а только при вычислительных операциях

    • @6E3KOMAPOB
      @6E3KOMAPOB 4 года назад +4

      @@Bandera_tut вы конечно же правы про свой GIL в каждом процессе, просто когда мы говорим про него (GIL), чаще всего имеется в виду ограничение на один процесс, что ограничивает производительность, и большая часть многоядерного процессора остается невостребованной, что в свою очередь решается multiprocessing'ом. Просто я написал это более обще фразой, вы конкретизировали, за что вам и спасибо ) И да стоит плодить процессы при соответствующей нагрузке, которую можно распараллелить, и при обработке миллионов однотипных запросов для скорейшего их выполнения и т.д.

  • @TheMurodilla
    @TheMurodilla 6 месяцев назад

    Самый понятный и ясный пример асинхронности. Спасибо за урок!

  • @ЕрвандАгаджанян-в3к
    @ЕрвандАгаджанян-в3к 3 года назад +2

    Миллион низких поклонов и благодарностей! У тебя дар преподавания)))

  • @shrimp4567
    @shrimp4567 5 месяцев назад

    спасибо за видео уроки. Было полезно. Считаю одним из лучших

  • @ЕвгенийПрочан
    @ЕвгенийПрочан 5 лет назад +10

    Олег, спасибо вам большое! Советую эти видео, коллегам, которые начинаются разбираться с асинхронностью. Очень обрадовался, когда увидел, что вы продолжаете выкладывать видео! Еще раз спасибо!

    • @zaemiel
      @zaemiel  5 лет назад +3

      Спасибо

  • @maxjerman
    @maxjerman 3 года назад +1

    Спасибо. Этот курс - находка. На редкость грамотное и толковое объяснение.

  • @killers512
    @killers512 5 лет назад +20

    Хочу написать коммент по всему циклу видео об асинхронности. Случайно в одном из пабликов наткнулся на ссылку на данный "курс". Читал все комменты. Курс отличный, радует, что он предполагает какие-то фоновые знания. Смотреть его интересно, т.к. он расчитан не на полных новичков (как подавляющее большинство). В этом его огромный плюс. Хотя, для автора это может быть и минусом. Меньше охват аудитории. Примерно об этом был коммент к предыдущему: начинали смотреть 20к человек, к концу осталась половина... А всё поняли, наверное, единицы. Желаю продолжать в том же духе. Лайк, подписка, колокольчик :)

    • @zaemiel
      @zaemiel  5 лет назад +3

      Спасибо

  • @НикитаРадин-х4р
    @НикитаРадин-х4р Год назад

    Спасибо, Олег! Просмотрел плейлист по асинхронности на одном дыхании. Сразу во всём разобрался. Однозначно подписка. Пойду изучать другие плейлисты на канале)

  • @tahirjalilov
    @tahirjalilov 4 года назад +2

    Отличный курс. Спасибо Олег!!! )) я перед началом просмотра ваших видео сначала ставлю лайк, а потом уже смотрю ))) знаю точно, что урок будет отличным !

  • @ВиталийБочкарев-р7щ

    Все простым языком и доходчиво. Я бы еще в последнем задании сделал callback для записи файла. add_done_callback(callback) и в callback делал бы запись ;) Но это наверное из разряда перфекционизма :))) Идеального кода не бывает

  • @yaroslaw_channel
    @yaroslaw_channel 3 года назад

    Спасибо за плейлист по Асинхронности, очень благодарен, ТАК ДЕРЖАТЬ!!!!

  • @СвятославСорокин-н9з

    Спасибо огромное и низкий поклон. Четкое ясное и корректное объяснение, приятным голосом и на понятных пример. Что может быть лучше?!

  • @e_a_r_t_h_m_a_n
    @e_a_r_t_h_m_a_n 4 года назад

    спасибо большое! самое емкое и четкое объяснение Asyncio в рунете! не ожидал, что между столь близкими версиями питона будут столь существенные различия

  • @ЕвгенийСкореев
    @ЕвгенийСкореев 5 лет назад +1

    Ваау, какой балдежный звук

  • @ВадимГулин-й6м
    @ВадимГулин-й6м 2 года назад

    Спасибо большое за курс, прекрасная подача материала, было интересно смотреть)

  • @tsoer2976
    @tsoer2976 5 лет назад +1

    С удовольствием смотрю ваши уроки. Все очень доступно не напряжёно."Разжевали и положили в рот" без искаженного восприятия, чем кстати грешат подавляющие большинство блогеров! Озвучивая термины и приемы, так как они звучать с правильным пониманием, а не как остальные видимо они сами не понимаю до конца) Если у меня возникают вопросы обязательно бегу Ваш канал. Видно, что канал не популярен, но я надеюсь что Вас это не остановит. Большое спасибо что делитесь знаниями!

    • @zaemiel
      @zaemiel  5 лет назад

      меня это остановит рано или поздно

    • @tsoer2976
      @tsoer2976 5 лет назад

      @@zaemiel Если вы решите закрыть канал, то могу я получить ссылку на ваши видеоматериалы. Для скачивания, чтобы оставить себе доступ к информации

    • @tsoer2976
      @tsoer2976 5 лет назад

      @@zaemiel Единственное что я могу сделать это только паспамить вашим каналом среди моих знакомых. Но результатов серьезных не обещаю

    • @zaemiel
      @zaemiel  5 лет назад

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

  • @alexeysilver3139
    @alexeysilver3139 5 лет назад +1

    ахах, я только досмотрел предыдущие 7 уроков) а тут такой сюрприз) спасибо!

  • @andredru4278
    @andredru4278 Год назад

    Спасибо. Красота!

  • @harrior1
    @harrior1 3 года назад

    Спасибо за отличный курс!

  • @igorkomarov6607
    @igorkomarov6607 5 лет назад

    Не успел посмотреть, но всемерно поддерживаю, лайк!

  • @ДенисЗ-г8й
    @ДенисЗ-г8й 5 лет назад +4

    Олег, а не думали над тем, чтоб создать курс с задачами и опубликовать на stepik? Там сейчас можно выкладывать курсы за небольшую плату! Думаю желающие будут и будет приятно вам за труды получить денежку! Как вариант!

  • @andreykalugin8075
    @andreykalugin8075 3 года назад

    Великолепно!

  • @deniscloudgeek
    @deniscloudgeek 5 лет назад

    Спасибо! Не дотянул длину видео до рекомендованных 10 минут для алгоритма RUclips.

  • @dmitryleiko2869
    @dmitryleiko2869 5 лет назад

    Отличный пример, спасибо :)

  • @Кантригоспел
    @Кантригоспел 5 лет назад +3

    Спасибо за урок!) Олег, ест просьба.
    Если будет возможность, запишите видео: какой тип данных использовать для конкретных задач.
    Когда списки, когда словари, когда множества и тд. Для каких задач одни оптимальны и самые быстрые, какие и для каких задач не целесообразно использовать.
    Кому интересно ставим лайки, чтоб увидел!

    • @zaemiel
      @zaemiel  5 лет назад +2

      Вам нужно проработать какой-нибудь туториал по основам языка. Можно взять мой.

    • @Thisstheend
      @Thisstheend 5 лет назад

      это в любой книге по алгоритмам и структурам данных есть

  • @dmitryponyatov2158
    @dmitryponyatov2158 5 лет назад +2

    а планируете делать серию про pattern matching не генераторах?
    например есть входящий (бесконечный поток) сообщений, есть буфер на N пакетов (Python-объекты)
    как на генераторах можно реализовать разбор такого потока по нескольким конкурирующим условиям?
    вырожденный пример: лексер языка программирования, без явной реализации конечного автомата
    генераторы чем-то напоминают комбинаторы (статьи Бизли еще не до читал/не допереводил, может в третьей части это есть), т.е. возможен ли на них рекурсивный парсинг?

    • @dmitryponyatov2158
      @dmitryponyatov2158 5 лет назад

      интересует не текстовый парсинг (для этого и так инструментов полно), а разбор и обработка потоков произвольных объектов, которые связаны между собой (например некая структура данных была сериализована, разбита на несколько отдельных пакетов, и потом они вперемешку передавались на другой выч.узел)
      или бинарный побитовый парсинг потока с ошибками (сегодня в телеграме срач устроил по этой теме), как пример -- разбор протоколов обмена, захваченных через радиоинтерфейс или поток ethernet пакетов

    • @dmitryponyatov2158
      @dmitryponyatov2158 5 лет назад

      что хочу: утилиту типа lex/yacc, которой на вход подается описание бинарных форматов, а на выходе -- синтезированный код стекового? автомата, который этот формат умеет разбирать, и запускать указанный в спецификации код (syntax driven парсинг, только для бинарных потоков и пакетов)
      применение: embedded, очень понравилось пользоваться Ragel для реализации ASCII протоколов, посматриваю варианты применения для разбора всевозможных образов памяти, и анализатора IoT радиотрафика
      Python -- сначала для прототипирования, понять сам принцип предикатного парсинга с возвратами, хотя Lora с ее десятком пакетов в минуту тоже потянет даже без кодогенерации

    • @zaemiel
      @zaemiel  5 лет назад

      Сдается мне, Дмитрий, кроме нас с вами эта тема вряд ли кого-то заинтересует.

    • @dmitryponyatov2158
      @dmitryponyatov2158 5 лет назад

      @@zaemiel как в автостопе -- "универсальный парсер всего на Python" будет неинтересен? или реализация потоковой обработки в стиле Spark на базовом Python... ну ок, поковыряюсь пока с манами Бизли, может чего и само получится

    • @zaemiel
      @zaemiel  5 лет назад +1

      я не знаю, может быть вы правы. Нужно подумать

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil 3 года назад

    я так понимаю, это все можно реализовать и самому, например на классах: счетчики в атрибутах, метод next или типа того
    а тут просто часть автоматизировано под капотом

  • @sainco3036
    @sainco3036 5 лет назад +1

    Спасибо.

  • @sergono8376
    @sergono8376 5 лет назад

    Спасибо за Вашу работу.
    Но еще один условный пример с условной асинхронностью получился. Зачем городить очередь, когда тот же результат получим через обычный цикл с вызовом next(g1...n)?
    Пример из 2го видео показателен, но строится на select. Можете, если не трудно, привести пример программы работающей с асинхронным stdin\out? И обьяснить как реализована блокирующая операция sleep в async sleep?

    • @zaemiel
      @zaemiel  5 лет назад

      Мыслите шире.
      Вот это: "Зачем городить очередь, когда тот же результат получим через обычный цикл с вызовом next(g1...n)? "
      будет на 100% синхронный код.

    • @sergono8376
      @sergono8376 5 лет назад

      @@zaemiel Можете пожалуйста прояснить, чем данный пример отличается от цикла? Вроде как в примере цикл не особо событийный тк, событий никаких нет. Потому и интересно узнать именно о способах реализации событий по примеру select\epoll и тд.

    • @zaemiel
      @zaemiel  5 лет назад

      события в данном случае - это генераторы. Ваша идея с циклом безусловно заставит генераторы/корутины работать по очереди, но если обработчиков генераторов или корутин будет несколько, то результат будет отличаться. Если очередь будет чем-то внешним (celery?), то цикл тоже не будет работать "точно также".

  • @АндрейД-й3ч
    @АндрейД-й3ч 4 года назад

    Так как решить задачу в видео, используя синтаксис async/await. То есть, как переключить выполнение с одной корутины на другую, не использую asyncio.sleep? Yield в async функциях приводит к ошибке.

  • @mrnobody_23
    @mrnobody_23 3 года назад

    классно

  • @unknownhero6187
    @unknownhero6187 3 года назад

    counter и функция и переменная внутри неё - думал не взлетит, пока смотрел

  • @cegheyYT
    @cegheyYT 5 лет назад

    Спасибо!

  • @МундштукВезучий
    @МундштукВезучий 4 года назад

    3:55
    Я сразу подумал о другом способе:
    if counter == 3:
    print(bang)
    counter = 0
    else:
    counter+=1
    Имеет ли место быть такой способ? Если это долгоиграющий цикл, к примеру...
    Или деление больших чисел не требует усилий от машины и лучше все таки оставить код более читабельным, но при этом выполнять деления каждую секунду?

    • @МундштукВезучий
      @МундштукВезучий 4 года назад

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

  • @david_shiko
    @david_shiko 4 года назад

    Извините, я немного суть упустил, асинхронные неблокирующие функции ВСЕГДА основываются на генераторах + коллбэках (модуль selector) ?

  • @Бревно-з5б
    @Бревно-з5б 5 лет назад +4

    Олег, а вы планируете делать видео про продвинутый Django?

  • @andreysemenov7717
    @andreysemenov7717 5 лет назад +1

    запиши про pyqt

  • @igorkomarov6607
    @igorkomarov6607 5 лет назад

    Добрый день! При деплое на 18.04 + апач в лоб не переносятся данные из psql. Подскажите плиз направление поиска, спасибо!

    • @Небагафича-ф9л
      @Небагафича-ф9л 5 лет назад

      Если у вас есть дамп файл расширения .sql можете его импортировать через ключ -f

  • @maratzvizdets1208
    @maratzvizdets1208 5 лет назад +2

    бля, чую, что с мэйн начало, а дальше еще не прогребаю...но то дело времени и техники

    • @pospos439
      @pospos439 4 года назад +1

      if __name__ == '__main__':
      если эта фиговина непонятна то она называется - менеджер контекста о ней подробно расписано в книжке - Пола Берри Изучаем программирование на Python.
      она нужна только для того чтобы эта программа работала когда её вызывает другая программа
      можешь её просто удалить только инициализацию генераторов сдвинь в начало строки

  • @nikolaygrachev4341
    @nikolaygrachev4341 5 лет назад +2

    Асинхронность напоминает невытесняющую многозадачность, как в вин3.1

    • @zaemiel
      @zaemiel  5 лет назад +1

      практически так и есть

  • @johnmcway6120
    @johnmcway6120 3 года назад

    Не сочти за грубось плз, оч классный контент.
    Но вот если бы по завершению изучения каждого концепта ты бы давал дз, допустим, было бы очень круто.
    Часто в комментариях замечаю как ты критикуешь смотрящих фразами "надо прорабатывать а не просто смотреть" что верно, однако новичкам сложно придумать как имплементировать концепты в свои задачи или типо того. К тому же если просить студентов оставить свои решения в комментах можно: 1 укрепить комьюнити провоцируя их на обсуждения плохих\хороших решений или вопросов 2.помочь каналу генерируя активность в комментах, что полезно для ютубского алгоритма.
    И давай там уже возвращайся. А то че т опять на пять месяцев залег.

  • @alexanderpadalka5708
    @alexanderpadalka5708 3 года назад

  • @victorzedwings
    @victorzedwings 3 года назад

    И в чём смысл?

  • @notstatilko4130
    @notstatilko4130 5 лет назад

    Давай больше по блокчейну и крипте, ты очень много не зацепил. Была бы интересна твоя реализация P2P и как это вообще будет выглядеть на Python

    • @zaemiel
      @zaemiel  5 лет назад +2

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

    • @notstatilko4130
      @notstatilko4130 5 лет назад

      @@zaemiel Спасибо! Буду ждать

  • @fleapse
    @fleapse 3 года назад

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

    • @КузнецовСергей-н2ф
      @КузнецовСергей-н2ф 2 года назад

      это асинхронность для бедняков

    • @tiratore3088
      @tiratore3088 2 года назад

      @@КузнецовСергей-н2ф , асинк в принципе не подразумевается параллельное выполнение. Скорее конкурентное. По крайней мере, если идет речь об асинхронности на генераторах, а не процессах или потоках

    • @lordent
      @lordent 9 месяцев назад

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

  • @guci_viola
    @guci_viola 2 года назад

    Ж