Основы асинхронности в Python #7: Asyncio, async/await

Поделиться
HTML-код
  • Опубликовано: 13 сен 2024
  • Мои курсы:
    Boosty:
    boosty.to/omol...
    Patreon:
    / karty-vsekh-41011404
    Разбор синтаксиса async/await, немного о декораторе @asyncio.coroutine и о "создании" событийного цикла с помощью модуля asyncio.
    На двух примерах:
    1. Простая демонстрация работы асинхронной программы с помощью синтаксиса Python 3.4 (декоратор @asyncio.coroutine и yield from), затем переход на синтаксис Python 3.5 с использованием async/await.
    2. Второй пример - скачивание 10 файлов. Первый вариант полностью синхронный, второй вариант - асинхронный с помощью asyncio, async/await и библиотеки aiohttp.
    Для второго примера придется установить aiohttp:
    pip install aiohttp
    (или pip3 install aiohttp)
    ** ИСХОДНЫЙ КОД **
    Основных проектов доступен в 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
    • Основы асинхронности в...

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

  • @artemchege
    @artemchege 2 года назад +11

    Страдал также как и вы в попытке перестроить свой мозг и привычку думать синхронно и вот что помогло именно мне: открываете пайчарм, пишите асинхронные примеры Олега или выдумываете свои, создаёте точку входа main и прям там сразу ставите дебаггер в паузу. А после неспешна и по шагам смотрите как, что и в какой последовательности выполняется. И сразу резко все становится понятно, а работа async/await прозрачна. Await это лишь точки в которых event loop бросает выполнение скрипта на некоторое время и бежит обслуживать следующий скрипт в очереди. И все. Как только второй скрипт спотыкается об await, event loop бежит обслуживать первого, если тот готов. И так до конца.

  • @vlad_gnom
    @vlad_gnom 3 месяца назад +2

    Спасибо Олегу за прекрасный курс, многое приоткрылось из под ширмы. Приколько знать, как все это работает с минимальным уровнем абстракций. Автору выражаю большую благодарность за потраченное время.❤️

  • @igorkulibaba7287
    @igorkulibaba7287 5 лет назад +91

    Как же классно Олег объясняешь! От души доначу знаю что помощь твоя не оценима. Спасибо

  • @peskovdev
    @peskovdev 2 года назад +8

    Не досчитался 2ух уроков:
    1) Реализовать часть функционала asyncio по превращению функции в корутину
    2) Дописать сервер с сокетами с async/await
    Но в целом серия уроков дала ОООООООЧЕНЬ сильный старт в асинхронности, думаю до этих пунктов дойду самостоятельно. Автору огромное спасибо! Даже в 22 году инфа актуальна)

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

      Да, я тоже заметил что сервер с async/await так и не написан, а жаль, пример был бы очень хороший

  • @trankov
    @trankov 3 года назад +5

    Господи, как же обалденно. Хочу, чтобы все учебники по Питону были такими.

  • @figaro2440
    @figaro2440 5 лет назад +25

    Спасибо. Олег Молчанов это лучшее что есть по питону в русском ютубе.

  • @makesomepeace
    @makesomepeace 6 месяцев назад +2

    Олег, курс огонь, спасибо огрменное!
    Тем кто досмотрел до этого видео и ничего не понял сходу (как я при первом подходе):
    - Начать смотреть цикл видео с самого начала
    - Если повторять за видео,а ещё лучше - ставить на паузу и пытаться самому написать код, а потом смотреть дальше, то всё становится понятно.
    Я прям почувствовал, как преисполнился в познании, после того как понял механизм работы yield from (await) =)
    - На предыдущих видео дебажить код по строкам тоже очень полезно, особенно, если вы какие-то свои дополнительные примеры придумываете (ответить клиенту что-нибудь сразу после accept-а, например)
    - Если сложно - не сдавайтесь! Понимание придёт со временем =)
    P.S. Cправедливости ради, request на сессиях тоже работает быстрее, чем обычный get (примерно в два раза), но медленнее чем асинхронный код)

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

    На win10 столкнулся с двумя ошибками(скорее особенностями).
    1. Программа заканчивается с ошибкой event loop is closed. Лечится установкой параметра asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()), перед вызовом asyncio.run(main(2))
    2. Сохраняется всего 1-2 файла. Проблема в особенности получения времени в Windows. Файлы, тупо, называются одним именем и перезаписывают друг друга. Лечится иным способом именования.
    По поводу курса - ОГОНЬ!!! Олег объясняет как боженька) Жаль пропал человек(((

  • @sergeyshevtsov5125
    @sergeyshevtsov5125 4 года назад +13

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

  • @at1set590
    @at1set590 2 месяца назад

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

  • @user-gd4lt7ox2m
    @user-gd4lt7ox2m 2 года назад +3

    Большое спасибо. Самое лучшее объяснение асинхронности Python которое я увидел. Особенно понравилось, что объяснение началось с азов. Больше узнал и понял про функции генераторы. Последние примеры тоже огонь! С удовольствием задоначу.

  • @suzuyah
    @suzuyah 4 года назад +3

    спустя 2 года наткнулся на этот плейлист и теперь благодаря нему разобрался во всём концепте async / await, что они из себя представляют и что такое event loop, день прошёл не зря

  • @yodapunishes
    @yodapunishes 4 года назад +28

    Потрясающе! Олег, было бы ещё очень интересно послушать от Вас про многопоточность / мультипроцессность / асинхронность, в плане где и что уместно применять. Наверняка у каждой схемы есть какие-то свои побочки на память, загрузку ЦП и т.д.

  • @TheEBPO
    @TheEBPO 9 дней назад

    Крутой курс по базе асинк, Спасибо!

  • @antistress_pro
    @antistress_pro Год назад +2

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

  • @Overlap_ed
    @Overlap_ed 2 года назад +1

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

  • @alexseydugin8109
    @alexseydugin8109 4 года назад +3

    В 5 утра записывать видосы по асинхронности :) большой риспект вам

  • @benyomin94
    @benyomin94 5 лет назад +12

    Олег, спасибо за еще одну прекрасную серию!
    В будущем интересно было бы послушать вас про функциональное программирование на python

  • @do_not_put_login_in_alias
    @do_not_put_login_in_alias 2 года назад +1

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

  • @darkmatiz
    @darkmatiz 5 лет назад +49

    Олег, кроме вас таких подробных руководств пока не нашел на Ютубе.
    Да, есть конечно курсы разные и т.д. - это отдельная всё таки вещь, там разбираюсь всё от базовых вещей, а потом разбирают на кейсах.
    Но ваши разборы в этом формате - очень конкурентные, спасибо.
    Ну и конечно: приятный голос, правильно объясняете - вам бы лекции вести :)

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

      Спасибо

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

      @Animus Pexus Не осилил?) Нормальный это ассемблер?

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

      @Animus Pexus Чисто из любопытства) Какие всё же языки вы считаете нормальными и почему? В палемику вступать не собираюсь, просто интересно))

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

      @Animus Pexus Дружище, просто шутка, не хотел обидеть))

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

      @Animus Pexus Go крутой, да?

  • @user-ee1lx1pe7n
    @user-ee1lx1pe7n 2 года назад

    Невозможно поверить, что может существовать настолько качественный контент)))

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

    Это просто что-то невероятное
    Спасибо, Олег!

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

    Одно из полезнейших видео, просмотренных мной в жизни

  • @user-jg3bb6mu2g
    @user-jg3bb6mu2g 5 лет назад +1

    Большое спасибо за эту отличную серию видеоуроков!

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

    Спасибо. Очень хорошо объясняете. Приятно учиться и все понятно!

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

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

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil 2 года назад +15

    00:00 Описание библиотеки Asyncio
    10:32 Пример: асинхронный вывод чисел и счетчика
    24:59 Пример: асинхронная скачка картинок из интернета

  • @pushkars9600
    @pushkars9600 2 года назад +1

    Ты просто лучший, спасибо ОГРОМНОЕ!

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

    Огромное спасибо вам, за ценный урок!

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

    Огромное спасибо. Появилось понимание async

  • @rlxinc.6016
    @rlxinc.6016 2 года назад +1

    Большое спасибо за курс!

  • @MrYoklmn
    @MrYoklmn 5 лет назад +40

    Олег, приветствую. Я не по теме видоса. Ты пропал. Это печально) появляйся скорее с новым видео. Если можешь снять видео про Celery или просто рассказать, как удаленно на сервере заставить питоновские скрипты работать по расписанию или по событиям- было бы очень здорово. Я знаю, что ты читаешь комментарии. Надеюсь, прочитаешь и мой. Удачи и спасибо!

    • @user-ki7kd8vf3t
      @user-ki7kd8vf3t 5 лет назад

      MrYoklmn где Олег? Что случилось как так

    • @johnsmith-yk5vz
      @johnsmith-yk5vz 5 лет назад +1

      celery было бы хорошим продолжением серии по django и asyncio

  • @OlesSmaha
    @OlesSmaha Год назад +1

    Олег, большое Вам спасибо за проделанную работу. На #5 и #6 усвоение информации для меня пошло немного тяжелее, разрыв шаблонов так сказать, но к этому уроку у меня, видимо, "прогрелся кэш", и информацию впитал на ура. :D Жаль, что вы не продемонстрировали возможность работы с файловой системой не прибегая к синхронной функции... Обратил внимание, что на Вашем канале нет новых видео уже 2 года, надеюсь, что у Вас всё хорошо! Очень понравилась ваша внимательность к деталям и в целом подача материала, Вы замечательный педагог. Возможно, в дальнейшем (по необходимости) ознакомлюсь с другими плейлистами с Вашего канала. Всех благ, очень благодарен!

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

    Спасибо большое. Не пишу на Python но вьінужден его читать)) Интересньій язьік, спасибо за об'ьяснения

  • @il7712
    @il7712 5 лет назад +6

    спасибо, божественно

  • @user-bf4ym7ss9j
    @user-bf4ym7ss9j 5 лет назад

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

  • @artur.tokranov
    @artur.tokranov Год назад

    Отличные уроки! Спасибо большое!

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

    Автору огромный респект)

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

    Олег, спасибо большое за серию этих видео.

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

    Спасибо. Понравилось. Стало яснее.

  • @Иван-о1ш9ц
    @Иван-о1ш9ц Год назад

    Спасибо большое за видео, отличные!

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

    Посмотрел все 7 вдосиков, задонатил, теперь буду переваривать инфу, прояснилось многое, но кое-какие вещи надо ещё переварить и понять.

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

    Спасибо за уроки. Ждем следующих. Очень познавательно.

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

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

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

    Жду 8 и 9 часть. Спасибо за видео!

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

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

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

    Большое спасибо за туториалы!

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

    Настало время начать использовать асинхронный код, но вот провести соплями по реальному примеру некому.
    Сама суть ясная была еще на вводных курсах, но внятный вариант реализации только твой )
    Очень хороший пример на основе aiohttp. Сама либа не сложная (тот же реквест только асинхронный), но вот не зная о ее существовании я бы бился с requests и ничего бы не добился )))
    Спасибо тебе большое!

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

    Олег, спасибо за полезные знания, задонатил.

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

    Спасибо вам Олег

  • @imortpsixo
    @imortpsixo Год назад +2

    Для тех, у кого зависает асинхронная загрузка. Скорее всего это не баг в коде, а блокировка со стороны сервера. Попробуйте воспользоваться другим котогенератором.

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

    спасибо из 24 года)

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

    Потрясающая серия роликов, спасибо!

  • @user-bf2iw8id4v
    @user-bf2iw8id4v 5 лет назад

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

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

    как всегда. Хорошая работа, Олег

  • @m0ntecr1st04
    @m0ntecr1st04 5 лет назад +42

    Начинало смотреть 22к людей, закончило - 11к. вывод - либо половина умерла от асинхронки, либо она им просто не зашла)

    • @user-sv4fu3ik3c
      @user-sv4fu3ik3c 4 года назад +11

      это еще отличный результат, обычно какие-то курсы - первый урок 35к, второй - 20к, десятый - 1.5к)

    • @amrklp
      @amrklp 4 года назад +3

      Либо кто-то нашел для себя решение и не стал смотреть все остальное.

    • @user-sv4fu3ik3c
      @user-sv4fu3ik3c 4 года назад

      Amarok ты внимательно смотрел курс?

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

      @@user-sv4fu3ik3c Я канал начал смотреть именно с этого видео, потому как мне надо было разобраться именно с asyncio, посмотрел еще другие видео, не по теме асинхронности. Мне нужно было разобраться в вопросе - я нашел объяснение. А уж всей темой в целом я ознакомлюсь как-нибудь потом.

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

      @Sensei - Says Да, спасибо, что переживали за меня все это время.

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

    Топовый контент по asyncio в русском ютубе.

  • @dv-key
    @dv-key 3 года назад

    Олег, ну вы серьезно считерили в своем сравнении синхронной и асинхронной загрузки картинок. Вы получили около 12 сек при синхронной загрузке, и около одной сек при асинхронной. Вот только в первом случае вы не использовали сессию, а во втором использовали! Выглядит все так, как будто производительность увеличилась в 12 раз из-за асинхронности. На самом же деле эксперимент не чистый.
    Проверил у себя, получил такие цифры:
    без сохранения сессии на 10 запросов уходит 2-3 сек
    если запрашивать в рамках одной сессии ~1,5 сек
    asyncio + session - около 1 сек.
    А вообще спасибо, вас приятно смотреть, все грамотно, чувствуется хорошее понимание.

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

      и в чем причина этого?

    • @dv-key
      @dv-key 2 года назад

      @@Das.Kleine.Krokodil В том что с использованием Session при направлении запроса к хосту у вас не будет устанавливаться новое соединение, а будет переиспользовано старое. Соответственно экономится время.
      И по моим замерам на моих примерах получилось, что именно это в первую очередь дало прирост скорости, а уже во вторую асинхронность.

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

      @@dv-key спасибо

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

    спасибо огромное этому человеку!

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

    честь и хвала. спасибо!

  • @mooderatorpro
    @mooderatorpro 5 лет назад +4

    Если честно, пока сам не начал играться с асинхронность - все объяснения как об стенку горох. Сделал на grequests + asyncio быстрый асинхронный парсер заголовков страниц (в качестве теста). Сравнил с тем же решением на обычных реквестах и многопроцессорности - реально быстрее получается на асинхроне прогрузить пачку страниц.
    Если кому интересно, могу показать код.

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

      Интересно, покажите!

    • @user-io2kp7jm6z
      @user-io2kp7jm6z 3 года назад

      Макс привет

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

    Спасибо. Тяжело дается :)))))))

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

    Класс! Спасибо большое!

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

    Спасибо огромное вам! Жаль что это всё что я могу сделать) Не представляю где бы я брал эту инфу. В жизни бы не подумал что асинхронность основана на генераторах

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

    Спасибо, Олег!

  • @MrGerka0291
    @MrGerka0291 10 месяцев назад

    Сотни лайков!!!! ❤❤❤

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

    Очень круто, спасибо большое за курс, но где же реализация примера из первого видео на async await?)

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

    Долго не мог понять как все-таки устроена функция await, когда хотел именно использовать синхронные методы (вместо aiohttp), но эта статья окончатель все пояснила: habr.com/ru/post/453348/
    P.S. благодаря предыдущим видео разобрался легко в статье.

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

    Шикарно

  • @user-jv1sn9zi7e
    @user-jv1sn9zi7e 2 года назад

    Огонь!

  • @user-tc2pt7ep7e
    @user-tc2pt7ep7e Год назад

    Супер🤟

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

    Классно объясняешь, но не слова про async for, этим можно было бы еще упростить код в последнем примере (допускаю, что в 2018 его могло еще не быть, но вроде все-таки был). Насчет работы с http через сессии все верно, но если в синхронном варианте использовать request.session, то тоже будет прирост скорости, хоть и не большой

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

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

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

    Благодарю!!!!!!!

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

    Спасибо, превосходное объяснение темы. Наконец-то стало до конца ясно, как именно работает асинхронность в питоне!
    Олег, а как asyncio превращает обычную функцию в генератор? Чтобы бесконечный цикл внутри не блокировал выполнение? Или вы тут этого добивались как раз с помощью asyncio.sleep, которая превращала нашу функцию в обёртку для генератора из модуля asyncio? А ensure_future (create task) занимается инициализацией генераторов, да? И наконец не могу не спросить: а что если мы await используем вместо конструкции yield from в классическом генераторе (хочу понять: это просто синтаксический сахар или там изменилось поведение)?
    В общем, ещё раз благодарю за замечательное объяснение.

  • @titov_ev
    @titov_ev 2 года назад +1

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

  • @user-it6md7gt8u
    @user-it6md7gt8u 5 лет назад +4

    Вопрос, к автору. Видео действительно хорошие. Но почему бы в конце плейлиста не дать ссылку на гит репозиторий?

    • @johnsmith-yk5vz
      @johnsmith-yk5vz 5 лет назад

      автор не дает готовый код, (и правильно делает) предполагая, что мы должны все понять и написать своё.

    • @Thisstheend
      @Thisstheend 4 года назад +4

      дает, но за деньги

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

    Если кто-то как и я столкнулся с ошибкой "RuntimeError: Event loop is closed" на windows, то мне помогло решение добавить перед asyncio.run(main2()) строку asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())

  • @user-hp1xs6jp4z
    @user-hp1xs6jp4z Год назад

    Некоторые вещи я всё таки не пойму. К примеру почему я должен боятся функции sleep(), если они как говорит автор полностью асинхронны? И это во первых.
    Во вторых хотелось бы узнать чем будет лучше использовать именно метод построения асинхронной программы из видео, чем метод с библиотекой threading? Метод threading тоже из функции делает что-то подобное или я где-то ошибаюсь? Поясните плиз.

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

    спасибо

  • @titov_ev
    @titov_ev 2 года назад +1

    Смотрю вроде как понятно, потом снова смотрю и не понятно где ставятся async и await. Понял только что в обяъвление фунций ставим async, а когда вызываем await, но в остальных случаях не совсем понятно.

  • @user-ou3cf9ov3v
    @user-ou3cf9ov3v 5 лет назад

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

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

    Отличное объяснение
    а вот с aiofile
    ```async def write_image_async(data, url):
    name = os.path.join("./images_async", url.split("/")[-1])
    async with AIOFile(name, 'wb') as file:
    await file.write(data)
    await file.fsync()
    ```
    получается медленнее чем синхронно писать файлы

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

      Потому что aiofile использует многопоточность, а я так понял в python это целая проблема, так как она реализуется через прослойку gil, которая призвана упростить работу с потоками. И по факту в каждый момент времени процессор выполняет только один поток. (habr.com/ru/post/149420/).
      Плюс есть еще проблема с одновременной записью нескольких файлов (можно проверить так поставить на копирование очередью и одновременно нескольких, очередь выиграет, особенно если фалов много). (dmlab.ru/python-aiofiles-vs-aiofile)

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

    Шикакрные видосы! Даже лучше чем у англоязычных коллег. (индусов не считаем ☻)
    Также хотел спросить, а есть простой способ и файлы асинхронно записывать? Я ведь понимаю что file.write(data) это блокирующая операция?

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

      В начале этого видео я об этом говорил.

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

    Олег, спасибо за видео.
    Огромная просьба выпустить видео со слушающим сервером aiohttp, внутри которого запросы с ClientSession на другой сервер.
    Вопрос в двух Event Loop. Одна встроенная в aiohttp.web и другая в asyncio.
    Зарание благодарю!

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

    а нельзя вместо первой блокирующей функции использовать пользовательский ввод?
    а вторая функция от этого ввода будет менять свое поведение не прекращая своей работы

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

    Привет! Ты знаешь, как можно помирить async и Buildozer? Знаю, что ты делал приложение на python, может сталкивался с такой проблемой…

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

    У кого код выдает ошибку Event loop is closed - это проблема с aiohttp. (и похоже только на винде). Решается добавлением одной строчки перед RUN:
    asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
    asyncio.run(main2())

  • @boris.shestov
    @boris.shestov 5 лет назад +1

    Спасибо за урок. Подскажите. Если использовать модуль multiprocessing для решения аналогичной задачи, как в конце видео, в примере с картинками? Уместно ли это? И какой результат в скорости был бы? Примерно такой же?

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

      Если процессов будет по количеству ядер процессора, то это даст определенный прирост в скорости.
      Но в общем и целом для IO-задач (а работа с сетью - это она) используются потоки.
      Насколько это будет быстрее по сравнению с асинхронным решением - я не знаю. Проверьте.

  • @PeterParker-ky1fv
    @PeterParker-ky1fv 3 года назад +2

    Новичкам которые начинают с питона (и не знают ничего об асинхронности) лучше смотреть с 7 видео, а потом с 1 до 7 (если будет интересно).

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

    Совсем забросили канал! Спасибо за видео. Жаль, что нет новых.

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

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

    • @user-yi3ud1ld8c
      @user-yi3ud1ld8c 5 лет назад +2

      мне будучи джуном ничего не мешает отспыпать гроши))

    • @user-yi3ud1ld8c
      @user-yi3ud1ld8c 5 лет назад

      @Lorem Ipsum всмысле?

    • @user-yi3ud1ld8c
      @user-yi3ud1ld8c 5 лет назад +1

      ​@Lorem Ipsum Без развития - никуда. Но многое упирается в сферу рынка в которой ты работаешь. Например, мне приходится создатавать карты и геоинформационные ресурсы, которые требуют знания территориального устройства, знания законов, знания в сфере кадастровой и рыночной оценки и.т.д. Но это везде так, например, друг работает программистом на бирже, как в фильме волк с уолл стрит(только без шлюх и наркотиков) и ему приходится изучать тонкости этой отрасли

    • @user-yi3ud1ld8c
      @user-yi3ud1ld8c 5 лет назад

      @Lorem Ipsum и вам

    • @user-kf4jz1gr7j
      @user-kf4jz1gr7j 3 года назад

      И как успехи?

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

    афигено

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

    с asyncio.run(main()) почему-то не работает, RuntimeError: Event loop is closed выдаёт
    а вот по старинке с :
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
    работает.

    • @user-kf4jz1gr7j
      @user-kf4jz1gr7j 3 года назад

      тоже самое было, спасибо😉

    • @user-ry3fx3pd5h
      @user-ry3fx3pd5h 3 года назад

      Подтверждаю. Хотя картинки скачались.
      Куда копать? Хочу asyncio.run(main()) без ошибок рантайма.

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

      @@user-ry3fx3pd5h win? вроде эта ошибка у меня была именно на винде. на линукс такой проблемы нет

    • @user-ry3fx3pd5h
      @user-ry3fx3pd5h 3 года назад

      Да, на win.
      Проверил в Арче - всё Ок.

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

      @@user-ry3fx3pd5h отсюда вывод, программировать под linux. какая-то проблема именно в библиотеке под win, я дотошно не изучал, или loop.run_until_complete

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

    Олег, можете посоветовать дополнительные материалы для изучение асинхронного программирования в Python? В т.ч. по asyncio, aiohttp. Спасибо)

    • @Das.Kleine.Krokodil
      @Das.Kleine.Krokodil 2 года назад +1

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

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

    @Олег Молчанов:
    9:05 В этих ваших словах нет ошибки?
    Вы говорите, что если корутина вызывает некоторую блокирующую функцию, то она также приостанавливается, но контроль выполнения возвращается обратно в событийный цикл
    Мне кажется в этих словах у вас ошибка. Дело в том, что мы и пишем асинхронный код раз из-за того, что блокирующие функции не возвращаются выполнения пока не выполнятся. Если вызвать блокирующую функцию, то возврата в событийный цикл не произойдет до тех пор пока блокирующая функция не будет выполнена и таким образом событийный зависнет.
    Возможно вы хотели сказать о другой ситуации? Прошу вас пояснить

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

      Как я понял, смысл в том, что фреймворк перед вызовом блокирующей функции отдает контроль выполнения, подобно тому как это делали мы в 4_async_gens.py через yield.

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

    9:03 Разве если корутина вызывает блокирующую функцию - то контроль передаётся в событийный цикл? Я попробовал запустить sleep(3) в одной из корутин - все задачи "заснули". Если вызываешь в корутине await asyncio.sleep(3) - то да- другие задачи из событийного цикла продолжают свою работу. Или Олег это и называет блокирующей функцией await asyncio.sleep(3) ?

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

    Зачем использовать декоратор, если мы используем yield from который делает функцию корутиной? И почему рядом с asyncio.sleep(1) используем yield from? Заранее спасибо.

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

    Приветствую, подкажите в каком видео вы рассказывали про SOLID ?

  • @user-so4lz3si3r
    @user-so4lz3si3r 3 года назад

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