Как всегда кратко и понятно) Спасибо за урок!) Благодаря именно этим урокам я смог устроиться на работу на позицию мидла решив их тестовое задание реализации клиент-сервер приложения) Я сейчас асинхронку понимаю очень хорошо благодаря вам)
А я сегодня благодаря этим урокам на работе оптимизировала систему которая собирает информацию из разных ресурсов для дальнейшего анализа переписав ее чтобы она работала асинхронно и именно ваши видео дали мне основное понимание и так сказать вдохновили, но я изначально не для этого смотрела ваш курс просто было интересно потом посмотрела и подумала надо где то применить и придумала😊 спасибо вам Олег!
Видно, что Олег - профессионал, который разбирается в том, что говорит до мелочей: понимает как устроена асинхронность, какой она была, как с ней работать. Рекомендую.
@@6E3KOMAPOBпроцессы в пайтоне не обходят GIL, просто в каждом процессе будет свой GIL и это никак не будет влиять на параллелизм, но и юзать процессы изза "обхода GIL" направо-налево не стоит, а только при вычислительных операциях
@@Bandera_tut вы конечно же правы про свой GIL в каждом процессе, просто когда мы говорим про него (GIL), чаще всего имеется в виду ограничение на один процесс, что ограничивает производительность, и большая часть многоядерного процессора остается невостребованной, что в свою очередь решается multiprocessing'ом. Просто я написал это более обще фразой, вы конкретизировали, за что вам и спасибо ) И да стоит плодить процессы при соответствующей нагрузке, которую можно распараллелить, и при обработке миллионов однотипных запросов для скорейшего их выполнения и т.д.
Олег, спасибо вам большое! Советую эти видео, коллегам, которые начинаются разбираться с асинхронностью. Очень обрадовался, когда увидел, что вы продолжаете выкладывать видео! Еще раз спасибо!
Хочу написать коммент по всему циклу видео об асинхронности. Случайно в одном из пабликов наткнулся на ссылку на данный "курс". Читал все комменты. Курс отличный, радует, что он предполагает какие-то фоновые знания. Смотреть его интересно, т.к. он расчитан не на полных новичков (как подавляющее большинство). В этом его огромный плюс. Хотя, для автора это может быть и минусом. Меньше охват аудитории. Примерно об этом был коммент к предыдущему: начинали смотреть 20к человек, к концу осталась половина... А всё поняли, наверное, единицы. Желаю продолжать в том же духе. Лайк, подписка, колокольчик :)
Спасибо, Олег! Просмотрел плейлист по асинхронности на одном дыхании. Сразу во всём разобрался. Однозначно подписка. Пойду изучать другие плейлисты на канале)
Отличный курс. Спасибо Олег!!! )) я перед началом просмотра ваших видео сначала ставлю лайк, а потом уже смотрю ))) знаю точно, что урок будет отличным !
Все простым языком и доходчиво. Я бы еще в последнем задании сделал callback для записи файла. add_done_callback(callback) и в callback делал бы запись ;) Но это наверное из разряда перфекционизма :))) Идеального кода не бывает
спасибо большое! самое емкое и четкое объяснение Asyncio в рунете! не ожидал, что между столь близкими версиями питона будут столь существенные различия
С удовольствием смотрю ваши уроки. Все очень доступно не напряжёно."Разжевали и положили в рот" без искаженного восприятия, чем кстати грешат подавляющие большинство блогеров! Озвучивая термины и приемы, так как они звучать с правильным пониманием, а не как остальные видимо они сами не понимаю до конца) Если у меня возникают вопросы обязательно бегу Ваш канал. Видно, что канал не популярен, но я надеюсь что Вас это не остановит. Большое спасибо что делитесь знаниями!
Олег, а не думали над тем, чтоб создать курс с задачами и опубликовать на stepik? Там сейчас можно выкладывать курсы за небольшую плату! Думаю желающие будут и будет приятно вам за труды получить денежку! Как вариант!
Спасибо за урок!) Олег, ест просьба. Если будет возможность, запишите видео: какой тип данных использовать для конкретных задач. Когда списки, когда словари, когда множества и тд. Для каких задач одни оптимальны и самые быстрые, какие и для каких задач не целесообразно использовать. Кому интересно ставим лайки, чтоб увидел!
а планируете делать серию про pattern matching не генераторах? например есть входящий (бесконечный поток) сообщений, есть буфер на N пакетов (Python-объекты) как на генераторах можно реализовать разбор такого потока по нескольким конкурирующим условиям? вырожденный пример: лексер языка программирования, без явной реализации конечного автомата генераторы чем-то напоминают комбинаторы (статьи Бизли еще не до читал/не допереводил, может в третьей части это есть), т.е. возможен ли на них рекурсивный парсинг?
интересует не текстовый парсинг (для этого и так инструментов полно), а разбор и обработка потоков произвольных объектов, которые связаны между собой (например некая структура данных была сериализована, разбита на несколько отдельных пакетов, и потом они вперемешку передавались на другой выч.узел) или бинарный побитовый парсинг потока с ошибками (сегодня в телеграме срач устроил по этой теме), как пример -- разбор протоколов обмена, захваченных через радиоинтерфейс или поток ethernet пакетов
что хочу: утилиту типа lex/yacc, которой на вход подается описание бинарных форматов, а на выходе -- синтезированный код стекового? автомата, который этот формат умеет разбирать, и запускать указанный в спецификации код (syntax driven парсинг, только для бинарных потоков и пакетов) применение: embedded, очень понравилось пользоваться Ragel для реализации ASCII протоколов, посматриваю варианты применения для разбора всевозможных образов памяти, и анализатора IoT радиотрафика Python -- сначала для прототипирования, понять сам принцип предикатного парсинга с возвратами, хотя Lora с ее десятком пакетов в минуту тоже потянет даже без кодогенерации
@@zaemiel как в автостопе -- "универсальный парсер всего на Python" будет неинтересен? или реализация потоковой обработки в стиле Spark на базовом Python... ну ок, поковыряюсь пока с манами Бизли, может чего и само получится
я так понимаю, это все можно реализовать и самому, например на классах: счетчики в атрибутах, метод next или типа того а тут просто часть автоматизировано под капотом
Спасибо за Вашу работу. Но еще один условный пример с условной асинхронностью получился. Зачем городить очередь, когда тот же результат получим через обычный цикл с вызовом next(g1...n)? Пример из 2го видео показателен, но строится на select. Можете, если не трудно, привести пример программы работающей с асинхронным stdin\out? И обьяснить как реализована блокирующая операция sleep в async sleep?
Мыслите шире. Вот это: "Зачем городить очередь, когда тот же результат получим через обычный цикл с вызовом next(g1...n)? " будет на 100% синхронный код.
@@zaemiel Можете пожалуйста прояснить, чем данный пример отличается от цикла? Вроде как в примере цикл не особо событийный тк, событий никаких нет. Потому и интересно узнать именно о способах реализации событий по примеру select\epoll и тд.
события в данном случае - это генераторы. Ваша идея с циклом безусловно заставит генераторы/корутины работать по очереди, но если обработчиков генераторов или корутин будет несколько, то результат будет отличаться. Если очередь будет чем-то внешним (celery?), то цикл тоже не будет работать "точно также".
Так как решить задачу в видео, используя синтаксис async/await. То есть, как переключить выполнение с одной корутины на другую, не использую asyncio.sleep? Yield в async функциях приводит к ошибке.
3:55 Я сразу подумал о другом способе: if counter == 3: print(bang) counter = 0 else: counter+=1 Имеет ли место быть такой способ? Если это долгоиграющий цикл, к примеру... Или деление больших чисел не требует усилий от машины и лучше все таки оставить код более читабельным, но при этом выполнять деления каждую секунду?
Я правда думаю это из разряда псевдо улучшения производительности в ущерб читабельности без весомых причин, т.к. со временем прихожу к тому, что читабельность все же важнее, если это не супер оптимизированный код на си
if __name__ == '__main__': если эта фиговина непонятна то она называется - менеджер контекста о ней подробно расписано в книжке - Пола Берри Изучаем программирование на Python. она нужна только для того чтобы эта программа работала когда её вызывает другая программа можешь её просто удалить только инициализацию генераторов сдвинь в начало строки
Не сочти за грубось плз, оч классный контент. Но вот если бы по завершению изучения каждого концепта ты бы давал дз, допустим, было бы очень круто. Часто в комментариях замечаю как ты критикуешь смотрящих фразами "надо прорабатывать а не просто смотреть" что верно, однако новичкам сложно придумать как имплементировать концепты в свои задачи или типо того. К тому же если просить студентов оставить свои решения в комментах можно: 1 укрепить комьюнити провоцируя их на обсуждения плохих\хороших решений или вопросов 2.помочь каналу генерируя активность в комментах, что полезно для ютубского алгоритма. И давай там уже возвращайся. А то че т опять на пять месяцев залег.
хмм, ивентлуп это конечно топ, но чет это не асинхронность. в один момент времени выполняется только одна функция. таким образом нельзя распаралелить запросы например.
@@КузнецовСергей-н2ф , асинк в принципе не подразумевается параллельное выполнение. Скорее конкурентное. По крайней мере, если идет речь об асинхронности на генераторах, а не процессах или потоках
Вы не поняли значения асинхронности, цикл событий действительно запускает одну задачу за раз, но в вашем примере с запросами, он не будет ждать ответа от сервера, а обработает в следующей задаче как только он вернётся, а пока вы ждёте ответа от сервера, цикл событий выполняет ещё какую-то работу, понимаете?
Как всегда кратко и понятно) Спасибо за урок!) Благодаря именно этим урокам я смог устроиться на работу на позицию мидла решив их тестовое задание реализации клиент-сервер приложения) Я сейчас асинхронку понимаю очень хорошо благодаря вам)
Ха-Ха! Это здорово! Очень за вас рад на самом деле. И рад, что мои усилия кому-то помогают.
@@zaemiel нет уроков про пайкут
сделайте плиз
На мидла? Пойду тогда по собесам ходить, пора остановить учебу)
@@zaemiel Олег, здравствуйте, подскажите пожалуйста, будет ли реализация из 1-го урока на async await?
А я сегодня благодаря этим урокам на работе оптимизировала систему которая собирает информацию из разных ресурсов для дальнейшего анализа переписав ее чтобы она работала асинхронно и именно ваши видео дали мне основное понимание и так сказать вдохновили, но я изначально не для этого смотрела ваш курс просто было интересно потом посмотрела и подумала надо где то применить и придумала😊 спасибо вам Олег!
Олег - человек которого хочется назвать преподавателем или специалистом, а не блогером
Видно, что Олег - профессионал, который разбирается в том, что говорит до мелочей: понимает как устроена асинхронность, какой она была, как с ней работать. Рекомендую.
Здравствуйте, Олег! Очень ждем от вас серию видео о многопоточности, многопроцессности (thread, threading, multiprocessing) в Python)
@@xTatsuran multiprocessing вполне себе обходит GIL
@@6E3KOMAPOBпроцессы в пайтоне не обходят GIL, просто в каждом процессе будет свой GIL и это никак не будет влиять на параллелизм, но и юзать процессы изза "обхода GIL" направо-налево не стоит, а только при вычислительных операциях
@@Bandera_tut вы конечно же правы про свой GIL в каждом процессе, просто когда мы говорим про него (GIL), чаще всего имеется в виду ограничение на один процесс, что ограничивает производительность, и большая часть многоядерного процессора остается невостребованной, что в свою очередь решается multiprocessing'ом. Просто я написал это более обще фразой, вы конкретизировали, за что вам и спасибо ) И да стоит плодить процессы при соответствующей нагрузке, которую можно распараллелить, и при обработке миллионов однотипных запросов для скорейшего их выполнения и т.д.
Самый понятный и ясный пример асинхронности. Спасибо за урок!
Миллион низких поклонов и благодарностей! У тебя дар преподавания)))
спасибо за видео уроки. Было полезно. Считаю одним из лучших
Олег, спасибо вам большое! Советую эти видео, коллегам, которые начинаются разбираться с асинхронностью. Очень обрадовался, когда увидел, что вы продолжаете выкладывать видео! Еще раз спасибо!
Спасибо
Спасибо. Этот курс - находка. На редкость грамотное и толковое объяснение.
Хочу написать коммент по всему циклу видео об асинхронности. Случайно в одном из пабликов наткнулся на ссылку на данный "курс". Читал все комменты. Курс отличный, радует, что он предполагает какие-то фоновые знания. Смотреть его интересно, т.к. он расчитан не на полных новичков (как подавляющее большинство). В этом его огромный плюс. Хотя, для автора это может быть и минусом. Меньше охват аудитории. Примерно об этом был коммент к предыдущему: начинали смотреть 20к человек, к концу осталась половина... А всё поняли, наверное, единицы. Желаю продолжать в том же духе. Лайк, подписка, колокольчик :)
Спасибо
Спасибо, Олег! Просмотрел плейлист по асинхронности на одном дыхании. Сразу во всём разобрался. Однозначно подписка. Пойду изучать другие плейлисты на канале)
Отличный курс. Спасибо Олег!!! )) я перед началом просмотра ваших видео сначала ставлю лайк, а потом уже смотрю ))) знаю точно, что урок будет отличным !
Все простым языком и доходчиво. Я бы еще в последнем задании сделал callback для записи файла. add_done_callback(callback) и в callback делал бы запись ;) Но это наверное из разряда перфекционизма :))) Идеального кода не бывает
Спасибо за плейлист по Асинхронности, очень благодарен, ТАК ДЕРЖАТЬ!!!!
Спасибо огромное и низкий поклон. Четкое ясное и корректное объяснение, приятным голосом и на понятных пример. Что может быть лучше?!
спасибо большое! самое емкое и четкое объяснение Asyncio в рунете! не ожидал, что между столь близкими версиями питона будут столь существенные различия
Ваау, какой балдежный звук
Спасибо большое за курс, прекрасная подача материала, было интересно смотреть)
С удовольствием смотрю ваши уроки. Все очень доступно не напряжёно."Разжевали и положили в рот" без искаженного восприятия, чем кстати грешат подавляющие большинство блогеров! Озвучивая термины и приемы, так как они звучать с правильным пониманием, а не как остальные видимо они сами не понимаю до конца) Если у меня возникают вопросы обязательно бегу Ваш канал. Видно, что канал не популярен, но я надеюсь что Вас это не остановит. Большое спасибо что делитесь знаниями!
меня это остановит рано или поздно
@@zaemiel Если вы решите закрыть канал, то могу я получить ссылку на ваши видеоматериалы. Для скачивания, чтобы оставить себе доступ к информации
@@zaemiel Единственное что я могу сделать это только паспамить вашим каналом среди моих знакомых. Но результатов серьезных не обещаю
нет, ссылку вы получить не сможете. Если я брошу канал, то я просто перестану создавать для него новый контент.
ахах, я только досмотрел предыдущие 7 уроков) а тут такой сюрприз) спасибо!
Спасибо. Красота!
Спасибо за отличный курс!
Не успел посмотреть, но всемерно поддерживаю, лайк!
Олег, а не думали над тем, чтоб создать курс с задачами и опубликовать на stepik? Там сейчас можно выкладывать курсы за небольшую плату! Думаю желающие будут и будет приятно вам за труды получить денежку! Как вариант!
Великолепно!
Спасибо! Не дотянул длину видео до рекомендованных 10 минут для алгоритма RUclips.
Отличный пример, спасибо :)
Спасибо за урок!) Олег, ест просьба.
Если будет возможность, запишите видео: какой тип данных использовать для конкретных задач.
Когда списки, когда словари, когда множества и тд. Для каких задач одни оптимальны и самые быстрые, какие и для каких задач не целесообразно использовать.
Кому интересно ставим лайки, чтоб увидел!
Вам нужно проработать какой-нибудь туториал по основам языка. Можно взять мой.
это в любой книге по алгоритмам и структурам данных есть
а планируете делать серию про pattern matching не генераторах?
например есть входящий (бесконечный поток) сообщений, есть буфер на N пакетов (Python-объекты)
как на генераторах можно реализовать разбор такого потока по нескольким конкурирующим условиям?
вырожденный пример: лексер языка программирования, без явной реализации конечного автомата
генераторы чем-то напоминают комбинаторы (статьи Бизли еще не до читал/не допереводил, может в третьей части это есть), т.е. возможен ли на них рекурсивный парсинг?
интересует не текстовый парсинг (для этого и так инструментов полно), а разбор и обработка потоков произвольных объектов, которые связаны между собой (например некая структура данных была сериализована, разбита на несколько отдельных пакетов, и потом они вперемешку передавались на другой выч.узел)
или бинарный побитовый парсинг потока с ошибками (сегодня в телеграме срач устроил по этой теме), как пример -- разбор протоколов обмена, захваченных через радиоинтерфейс или поток ethernet пакетов
что хочу: утилиту типа lex/yacc, которой на вход подается описание бинарных форматов, а на выходе -- синтезированный код стекового? автомата, который этот формат умеет разбирать, и запускать указанный в спецификации код (syntax driven парсинг, только для бинарных потоков и пакетов)
применение: embedded, очень понравилось пользоваться Ragel для реализации ASCII протоколов, посматриваю варианты применения для разбора всевозможных образов памяти, и анализатора IoT радиотрафика
Python -- сначала для прототипирования, понять сам принцип предикатного парсинга с возвратами, хотя Lora с ее десятком пакетов в минуту тоже потянет даже без кодогенерации
Сдается мне, Дмитрий, кроме нас с вами эта тема вряд ли кого-то заинтересует.
@@zaemiel как в автостопе -- "универсальный парсер всего на Python" будет неинтересен? или реализация потоковой обработки в стиле Spark на базовом Python... ну ок, поковыряюсь пока с манами Бизли, может чего и само получится
я не знаю, может быть вы правы. Нужно подумать
я так понимаю, это все можно реализовать и самому, например на классах: счетчики в атрибутах, метод next или типа того
а тут просто часть автоматизировано под капотом
Спасибо.
Спасибо за Вашу работу.
Но еще один условный пример с условной асинхронностью получился. Зачем городить очередь, когда тот же результат получим через обычный цикл с вызовом next(g1...n)?
Пример из 2го видео показателен, но строится на select. Можете, если не трудно, привести пример программы работающей с асинхронным stdin\out? И обьяснить как реализована блокирующая операция sleep в async sleep?
Мыслите шире.
Вот это: "Зачем городить очередь, когда тот же результат получим через обычный цикл с вызовом next(g1...n)? "
будет на 100% синхронный код.
@@zaemiel Можете пожалуйста прояснить, чем данный пример отличается от цикла? Вроде как в примере цикл не особо событийный тк, событий никаких нет. Потому и интересно узнать именно о способах реализации событий по примеру select\epoll и тд.
события в данном случае - это генераторы. Ваша идея с циклом безусловно заставит генераторы/корутины работать по очереди, но если обработчиков генераторов или корутин будет несколько, то результат будет отличаться. Если очередь будет чем-то внешним (celery?), то цикл тоже не будет работать "точно также".
Так как решить задачу в видео, используя синтаксис async/await. То есть, как переключить выполнение с одной корутины на другую, не использую asyncio.sleep? Yield в async функциях приводит к ошибке.
классно
counter и функция и переменная внутри неё - думал не взлетит, пока смотрел
Спасибо!
3:55
Я сразу подумал о другом способе:
if counter == 3:
print(bang)
counter = 0
else:
counter+=1
Имеет ли место быть такой способ? Если это долгоиграющий цикл, к примеру...
Или деление больших чисел не требует усилий от машины и лучше все таки оставить код более читабельным, но при этом выполнять деления каждую секунду?
Я правда думаю это из разряда псевдо улучшения производительности в ущерб читабельности без весомых причин, т.к. со временем прихожу к тому, что читабельность все же важнее, если это не супер оптимизированный код на си
Извините, я немного суть упустил, асинхронные неблокирующие функции ВСЕГДА основываются на генераторах + коллбэках (модуль selector) ?
Олег, а вы планируете делать видео про продвинутый Django?
И flask)
запиши про pyqt
Добрый день! При деплое на 18.04 + апач в лоб не переносятся данные из psql. Подскажите плиз направление поиска, спасибо!
Если у вас есть дамп файл расширения .sql можете его импортировать через ключ -f
бля, чую, что с мэйн начало, а дальше еще не прогребаю...но то дело времени и техники
if __name__ == '__main__':
если эта фиговина непонятна то она называется - менеджер контекста о ней подробно расписано в книжке - Пола Берри Изучаем программирование на Python.
она нужна только для того чтобы эта программа работала когда её вызывает другая программа
можешь её просто удалить только инициализацию генераторов сдвинь в начало строки
Асинхронность напоминает невытесняющую многозадачность, как в вин3.1
практически так и есть
Не сочти за грубось плз, оч классный контент.
Но вот если бы по завершению изучения каждого концепта ты бы давал дз, допустим, было бы очень круто.
Часто в комментариях замечаю как ты критикуешь смотрящих фразами "надо прорабатывать а не просто смотреть" что верно, однако новичкам сложно придумать как имплементировать концепты в свои задачи или типо того. К тому же если просить студентов оставить свои решения в комментах можно: 1 укрепить комьюнити провоцируя их на обсуждения плохих\хороших решений или вопросов 2.помочь каналу генерируя активность в комментах, что полезно для ютубского алгоритма.
И давай там уже возвращайся. А то че т опять на пять месяцев залег.
✔
И в чём смысл?
Давай больше по блокчейну и крипте, ты очень много не зацепил. Была бы интересна твоя реализация P2P и как это вообще будет выглядеть на Python
Я подумаю над вашим предложением. По блокчейну - собирался делать, а по крипте - не уверен, но вполне может быть.
@@zaemiel Спасибо! Буду ждать
хмм, ивентлуп это конечно топ, но чет это не асинхронность. в один момент времени выполняется только одна функция. таким образом нельзя распаралелить запросы например.
это асинхронность для бедняков
@@КузнецовСергей-н2ф , асинк в принципе не подразумевается параллельное выполнение. Скорее конкурентное. По крайней мере, если идет речь об асинхронности на генераторах, а не процессах или потоках
Вы не поняли значения асинхронности, цикл событий действительно запускает одну задачу за раз, но в вашем примере с запросами, он не будет ждать ответа от сервера, а обработает в следующей задаче как только он вернётся, а пока вы ждёте ответа от сервера, цикл событий выполняет ещё какую-то работу, понимаете?
Ж