ASYNCIO НА ПРАКТИЧЕСКОМ ПРИМЕРЕ
Привет! Показываю на пальцах, в чём крутость асинхронного кода на Python и показываю, как с помощью него эффективно взаимодействовать с БД.
Поддержать:
/ luchanos
/ @luchanos
#ityoutubers #ityoutubersru
Привет! Показываю на пальцах, в чём крутость асинхронного кода на Python и показываю, как с помощью него эффективно взаимодействовать с БД.
Поддержать:
/ luchanos
/ @luchanos
#ityoutubers #ityoutubersru
Пікірлер: 82
Спасибо, на этапе изучения асинхронности, которая сама по себе является очень сложно для понимания темой, вот такие прикладные ролики с примерами использования просто бесценны
Кайфанул! Спустя 1,5 года разработки не расторопных сервисов, наконец то добрался до асинхрона. Спасибо!
Очень доходчиво! Благодарю за труд!
сколько твоих видосов не смотрю, каждый раз понимаю, что очень доступно объясняешь, респект
подписан на тебя где-то год, но когда нахожу такие старые видео у тебя - респект к каналу все больше растет)
Парень, спасибо большое ! Очень круто объяснил!
Спасибо за познавательный материал без воды👍
Очень сильно понравилось, спасибо
отличный туториал,спасибо автор 👍
Спасибо за труд! Постепенно вхожу в сферу!)
Круто! До этого плохо понимал как работает asyncio, но теперь все понятно
Спасибо большое! очень доходчиво! а боялась, что не осилю асинхронность)
благодарю за отличную работу !
@luchanos
2 жыл бұрын
спасибо что смотрите!
Большое спасибо за видеоурок
отличный материал - спасибо!
Спасибо! Очень помогло!
Полезная тема! Надо глубже.
@luchanos
2 жыл бұрын
спасибо! сделаем)
Спасибо!!! Интересно, полезно, и вроде как вполне "взрослый" подход
Асинхронка крутая тема👍 ждём новых выпусков про неё)
дякую! змістовний приклад!
Хорошее видео) Есть только один вопрос - можно ли в chunk передать сразу все 10000 запросов? Как проверить это ограничение и что вообще будет?
Пересмотрел и спустя полгода понял что к чему)))
отличное видео. красавец
Спасибо! Понятно
Отлично! Лайк и подписка!
@luchanos
2 жыл бұрын
спасибо! постараюсь радовать контентом!
Спасибо, было очень познавательно
@luchanos
2 жыл бұрын
благодарю!
Круто спасибо
@luchanos
2 жыл бұрын
И вам)
Когда нужен был create table, а pyspark умеет только dml , нашел это изделие И получается, отправляю в базу один ddl запрос через асинхронную функцию, предназначенную для параллельной работы тьмы запросов Профит
Лайк! (по рекомендачии от канала джангоскул)
Офигеть год прошел)
А если не использовать асинхронную библиотеку для постгри и пытаться стандартной библиотекой psycopg2 выполнять запросы в функциях-корутинах завернутых в async + await asyncio.sleep(0.1). Не будет также по скорости? Вопрос в целом, почему нельзя использовать синхронную библиотеку для записи БД или чего-то ещё, если мы всё равно можем передать для async def xxx(). awaitable объект.
Можно и блокирующий код запускать, для этого используется конструкция loop.run_in_executor(). Но вот написать не блокирующий код не используя await asyncio.sleep() и уже готовые библиотеки которые это поддерживают, это уже интересно.
Очень круто, было бы прикольно осознать как запускать в фоне процесс без ожидания
@luchanos
2 жыл бұрын
процесс как python-процесс? не могли бы вы конкретизировать?
такой вопрос: в каком случае лучше использовать асинхронность, а в каком многопоточность, если обе штуки нужны для задач ввода-вывода?
@hopelesssuprem1867
Жыл бұрын
@Ivan Petrov спасибо за развернутый ответ)
Да топчик
@luchanos
2 жыл бұрын
спасибо!
👍🏻
В конце sleep забыл удалить
@Ybuotue
Жыл бұрын
Не забыл, а оставил для имитации задержки сети, подключается же к локалхосту.
4:39 наша лупа))
@luchanos
2 жыл бұрын
Ага и пупа)
Супер видео! Спасибо! Кстати, можно убрать искусственно тормозящий asyncio.sleep в конце и будет еще быстрее)
@luchanos
2 жыл бұрын
да! но это спецом было сделано)
Интересно а если неизвестно заранее количество запросов? Получается если поставить длину 1, то он будет ждать пока не наберётся 200 и пользователю ничего не вернётся?
@luchanos
2 жыл бұрын
абсолютно верно!) тут надо понимать какие риски мы несём и как с этим бороться. в ремейке этого ролика я покажу расширенный вариант)
@alexsur7315
2 жыл бұрын
@@luchanos спасибо. А когда ролик на этот счёт будет выпущен?
@luchanos
2 жыл бұрын
@@alexsur7315 я думаю что это всё будет в рамках проекта, по срокам точно не скажу сейчас. идея в том, что тот материал, который я тут осветил прикрутить на что-то "боевое". я уже купил домен и там есть сервер на котором будет web-app, которое мы будем покрывать всеми такими вот прелестями)
странно получается) до 10 инсерта как-то в разнобой ID и cnt, потом нормально create table test (id serial not null, val text) QUERY = """INSERT INTO test (val) VALUES ($1)""" await db_pool.fetch(QUERY, 'test insert ' + str(cnt)) ID. VAL 1 test insert 2 2 test insert 4 3 test insert 1 4 test insert 7 5 test insert 3 6 test insert 6 7 test insert 8 8 test insert 5 9 test insert 9 10 test insert 10
@luchanos
2 жыл бұрын
это связано с тем, что вывод в консольку может долетать с разной скоростью от каждой таски) аналогично может получиться, что сначала в консольке будет Exception, а потом все остальное)
Интересно. Спасибо. НО БОЛЬШАЯ ПРОСЬБА не бить так сильно по клавишам!!! В наушниках очень не приятно слушать.
@luchanos
2 жыл бұрын
спасибо! я уже купил оборудование - будет ремастер старых роликов)
спасиюо за видео. сделай пожалуйста большой ,углубленный туториал реальным проектом по этой теме.
@luchanos
2 жыл бұрын
уже в разработке!) ждите анонс!)
Классное видео, только "or pended == 10_000" никогда не исполнится(т.к. 9_999 будет последним в range )
@luchanos
2 жыл бұрын
хаха)) действительно)) спасибо!)
@avazart614
2 жыл бұрын
@@luchanos А сколько по умолчанию в пуле воркеров ? Можно его менять ... стоило упомянуть
@olzh6285
Жыл бұрын
pended и не нужен, у него цикл х из 10_000, мог бы использовать х, что бы не добавлять лишние действия. Но это не важно, главное знания про асинхронность он донес
tasks в середину цикла. Почему не показать пример с батч генератором.
@luchanos
2 жыл бұрын
хороший кейс, спасибо! покажу в переработанном материале)
Интересно, а зачем create_pool асинхронный?
@luchanos
3 жыл бұрын
Потому что подключение к базе тоже занимает время и может происходить с задержками
Спешиал сенкс за отсылку к PEP 515 - Underscores in Numeric Literals. Забыл шо так можно.
Здравствуйте. ищу решение. У меня такая проблема. Основной код асинхронный, и при определённом выполнении условия должен создаваться новый тред/поток, который должен жить уже дальше своей жизнью. Но к сожалению выходит так, что создаётся новый потом внутри асинхронке и он стопорит всё, пока не закончит свою работу. Уже месяца 2 ищу как мне создать новый поток, который бы зарождался в асинхронке и жил своей жизнью. Может у кого есть идеи? ПС. Пожалуйста не пишите, мол зачем тебе, сделай асинхронно вообще всё. Это не решение моей задачи. Мне нужный асинхронный парсинг в процессе работы которого, выполняется условие и стартует грубо говоря отдельная программа. И мне нужно, что бы это был именно новый поток. Ни и что бы совсем усложнить задачу, количество будущих потоков неизвестно (динамическое). Кто знает решение такой задачи. Отзовитесь ))
@maxvakker7719
9 ай бұрын
Уже неактуально (
Еще бы как-нибудь создать код анализирующий нагрузку на БД и автоматом меняющий чанки на оптимальное значение. По теме - палец вверх
@luchanos
2 жыл бұрын
обычно такие вещи админы смотрят глазами. существует такой параметр, он называется утилизация. вот надо чтобы он + время ответа базы не превышало допустимые значения) постараюсь раскрыть тему)
Я экспериментировал с asyncio и библиотекой Jira. Не хотят они дружить(( У Вас нет не чего в этой теме?
@luchanos
2 жыл бұрын
Никогда не слышал про библиотеку Jira, надо будет поугглить
забыл убрать await sleep(.1)
+++
Бесполезное видео. Вы не даете конкретики во времени выполнения. Много всяких излишеств. Раз уж вы показываете gather, то следовало бы использовать comprehension, заполняемый корутинами.
@luchanos
4 ай бұрын
Сделайте видео лучше, я приду и оценю с удовольствием))
ахиреть как быстро стало работать. столкнулся с проблемой асинхронности с ТГ ботом на aiogram не хочет работать просто так с sqlite а мне она идеально подходит +-. Ну и шаг назад два вперёд , сейчас буду повторять код.
круто нихера не понял где можно нормльно разобрать асинх у меня надо гет пост в панду сложить прилетит джсон после псот проверил методом раскидать по ядрам ну бустрее но ядра занимать не хочется # df['jsonreport'] = df.newbody.parallel_apply(self.apply_func) типо того на 4 быстрее чем просто апплай да ) но вот про асинхр пытаюсь понять как действовать ничига не понимаю(