ASYNCIO НА ПРАКТИЧЕСКОМ ПРИМЕРЕ

แชร์
ฝัง
  • เผยแพร่เมื่อ 27 ธ.ค. 2020
  • Привет! Показываю на пальцах, в чём крутость асинхронного кода на Python и показываю, как с помощью него эффективно взаимодействовать с БД.
    Поддержать:
    / luchanos
    / @luchanos
    #ityoutubers #ityoutubersru

ความคิดเห็น • 82

  • @alex_kird
    @alex_kird หลายเดือนก่อน +1

    Очень сильно понравилось, спасибо

  • @ChrisNasredin
    @ChrisNasredin 7 หลายเดือนก่อน +2

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

  • @HEKPACOFF
    @HEKPACOFF ปีที่แล้ว

    Очень доходчиво! Благодарю за труд!

  • @BestCrafting1
    @BestCrafting1 ปีที่แล้ว +1

    отличный туториал,спасибо автор 👍

  • @PlanSK
    @PlanSK ปีที่แล้ว

    Спасибо за познавательный материал без воды👍

  • @ivan_inanych
    @ivan_inanych ปีที่แล้ว +1

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

  • @99phenomenon
    @99phenomenon ปีที่แล้ว

    Спасибо за труд! Постепенно вхожу в сферу!)

  • @supreltd
    @supreltd 10 หลายเดือนก่อน +1

    Кайфанул!
    Спустя 1,5 года разработки не расторопных сервисов, наконец то добрался до асинхрона. Спасибо!

  • @dizoner2610
    @dizoner2610 ปีที่แล้ว +1

    Парень, спасибо большое ! Очень круто объяснил!

  • @Ratmirsh
    @Ratmirsh 2 หลายเดือนก่อน

    подписан на тебя где-то год, но когда нахожу такие старые видео у тебя - респект к каналу все больше растет)

  • @EvgeniyYatsenko
    @EvgeniyYatsenko 7 หลายเดือนก่อน

    отличный материал - спасибо!

  • @letsplaybi
    @letsplaybi 7 หลายเดือนก่อน +1

    Спасибо большое! очень доходчиво! а боялась, что не осилю асинхронность)

  • @vanker_189
    @vanker_189 ปีที่แล้ว

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

  • @ivangordiychuk5510
    @ivangordiychuk5510 ปีที่แล้ว

    Спасибо! Очень помогло!

  • @denissavast
    @denissavast 2 ปีที่แล้ว +2

    благодарю за отличную работу !

    • @luchanos
      @luchanos  2 ปีที่แล้ว

      спасибо что смотрите!

  • @rtyhujrtyhfjfghjgfj
    @rtyhujrtyhfjfghjgfj ปีที่แล้ว

    Круто! До этого плохо понимал как работает asyncio, но теперь все понятно

  • @olhap.1414
    @olhap.1414 ปีที่แล้ว

    дякую! змістовний приклад!

  • @vyacheslavm7844
    @vyacheslavm7844 3 ปีที่แล้ว +2

    Асинхронка крутая тема👍 ждём новых выпусков про неё)

  • @user-qe3nq4tw8i
    @user-qe3nq4tw8i 2 ปีที่แล้ว +3

    Полезная тема! Надо глубже.

    • @luchanos
      @luchanos  2 ปีที่แล้ว

      спасибо! сделаем)

  • @user-hq7bv6sw8t
    @user-hq7bv6sw8t 4 หลายเดือนก่อน

    Когда нужен был create table, а pyspark умеет только dml , нашел это изделие
    И получается, отправляю в базу один ddl запрос через асинхронную функцию, предназначенную для параллельной работы тьмы запросов
    Профит

  • @gryu7214
    @gryu7214 2 ปีที่แล้ว

    Спасибо! Понятно

  • @anim5812
    @anim5812 2 ปีที่แล้ว +3

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

    • @luchanos
      @luchanos  2 ปีที่แล้ว

      благодарю!

  • @user-qv4ub9se1b
    @user-qv4ub9se1b 7 หลายเดือนก่อน

    отличное видео. красавец

  • @romanbush5164
    @romanbush5164 2 ปีที่แล้ว +2

    Круто спасибо

    • @luchanos
      @luchanos  2 ปีที่แล้ว +1

      И вам)

  • @andreykalugin8075
    @andreykalugin8075 2 ปีที่แล้ว +1

    Отлично! Лайк и подписка!

    • @luchanos
      @luchanos  2 ปีที่แล้ว

      спасибо! постараюсь радовать контентом!

  • @valeriyemelyanov9090
    @valeriyemelyanov9090 6 หลายเดือนก่อน

    Спасибо!!! Интересно, полезно, и вроде как вполне "взрослый" подход

  • @andrey_1364
    @andrey_1364 ปีที่แล้ว +1

    Пересмотрел и спустя полгода понял что к чему)))

  • @Spk111
    @Spk111 2 ปีที่แล้ว +1

    Да топчик

    • @luchanos
      @luchanos  2 ปีที่แล้ว

      спасибо!

  • @dmytroznak8843
    @dmytroznak8843 2 ปีที่แล้ว +1

    👍🏻

  • @googleadmin4749
    @googleadmin4749 2 ปีที่แล้ว +3

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

    • @luchanos
      @luchanos  2 ปีที่แล้ว

      процесс как python-процесс? не могли бы вы конкретизировать?

  • @Nick_Libman
    @Nick_Libman 9 หลายเดือนก่อน

    Хорошее видео) Есть только один вопрос - можно ли в chunk передать сразу все 10000 запросов? Как проверить это ограничение и что вообще будет?

  • @avazart614
    @avazart614 2 ปีที่แล้ว

    Лайк! (по рекомендачии от канала джангоскул)

  • @PavelMostovoy
    @PavelMostovoy 2 ปีที่แล้ว +1

    Можно и блокирующий код запускать, для этого используется конструкция loop.run_in_executor(). Но вот написать не блокирующий код не используя await asyncio.sleep() и уже готовые библиотеки которые это поддерживают, это уже интересно.

  • @romanbush5164
    @romanbush5164 10 หลายเดือนก่อน +1

    Офигеть год прошел)

  • @user-eb3lz3ox8u
    @user-eb3lz3ox8u 2 ปีที่แล้ว +1

    4:39 наша лупа))

    • @luchanos
      @luchanos  2 ปีที่แล้ว

      Ага и пупа)

  • @cs_dequeue
    @cs_dequeue 2 ปีที่แล้ว +1

    Супер видео! Спасибо! Кстати, можно убрать искусственно тормозящий asyncio.sleep в конце и будет еще быстрее)

    • @luchanos
      @luchanos  2 ปีที่แล้ว

      да! но это спецом было сделано)

  • @orkhangasanov
    @orkhangasanov 2 หลายเดือนก่อน

    А если не использовать асинхронную библиотеку для постгри и пытаться стандартной библиотекой psycopg2 выполнять запросы в функциях-корутинах завернутых в async + await asyncio.sleep(0.1). Не будет также по скорости? Вопрос в целом, почему нельзя использовать синхронную библиотеку для записи БД или чего-то ещё, если мы всё равно можем передать для async def xxx(). awaitable объект.

  • @johnylemon473
    @johnylemon473 2 ปีที่แล้ว +3

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

    • @luchanos
      @luchanos  2 ปีที่แล้ว +2

      уже в разработке!) ждите анонс!)

  • @antonkryukov7134
    @antonkryukov7134 2 ปีที่แล้ว +6

    В конце sleep забыл удалить

    • @Ybuotue
      @Ybuotue ปีที่แล้ว +1

      Не забыл, а оставил для имитации задержки сети, подключается же к локалхосту.

  • @hopelesssuprem1867
    @hopelesssuprem1867 2 ปีที่แล้ว +2

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

    • @hopelesssuprem1867
      @hopelesssuprem1867 ปีที่แล้ว

      @Ivan Petrov спасибо за развернутый ответ)

  • @radikmasagutov9716
    @radikmasagutov9716 2 ปีที่แล้ว +2

    Интересно. Спасибо. НО БОЛЬШАЯ ПРОСЬБА не бить так сильно по клавишам!!! В наушниках очень не приятно слушать.

    • @luchanos
      @luchanos  2 ปีที่แล้ว

      спасибо! я уже купил оборудование - будет ремастер старых роликов)

  • @user-gy2ji3ur4z
    @user-gy2ji3ur4z 2 ปีที่แล้ว +3

    Еще бы как-нибудь создать код анализирующий нагрузку на БД и автоматом меняющий чанки на оптимальное значение. По теме - палец вверх

    • @luchanos
      @luchanos  2 ปีที่แล้ว +2

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

  • @user-vo2ci9gb1x
    @user-vo2ci9gb1x 3 ปีที่แล้ว +1

    странно получается) до 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
      @luchanos  2 ปีที่แล้ว

      это связано с тем, что вывод в консольку может долетать с разной скоростью от каждой таски) аналогично может получиться, что сначала в консольке будет Exception, а потом все остальное)

  • @alexsur7315
    @alexsur7315 2 ปีที่แล้ว +2

    Интересно а если неизвестно заранее количество запросов? Получается если поставить длину 1, то он будет ждать пока не наберётся 200 и пользователю ничего не вернётся?

    • @luchanos
      @luchanos  2 ปีที่แล้ว

      абсолютно верно!) тут надо понимать какие риски мы несём и как с этим бороться. в ремейке этого ролика я покажу расширенный вариант)

    • @alexsur7315
      @alexsur7315 2 ปีที่แล้ว +1

      @@luchanos спасибо. А когда ролик на этот счёт будет выпущен?

    • @luchanos
      @luchanos  2 ปีที่แล้ว

      @@alexsur7315 я думаю что это всё будет в рамках проекта, по срокам точно не скажу сейчас. идея в том, что тот материал, который я тут осветил прикрутить на что-то "боевое". я уже купил домен и там есть сервер на котором будет web-app, которое мы будем покрывать всеми такими вот прелестями)

  • @ivanowdenis
    @ivanowdenis 2 ปีที่แล้ว +3

    Классное видео, только "or pended == 10_000" никогда не исполнится(т.к. 9_999 будет последним в range )

    • @luchanos
      @luchanos  2 ปีที่แล้ว

      хаха)) действительно)) спасибо!)

    • @avazart614
      @avazart614 2 ปีที่แล้ว

      @@luchanos А сколько по умолчанию в пуле воркеров ? Можно его менять ... стоило упомянуть

    • @olzh6285
      @olzh6285 ปีที่แล้ว

      pended и не нужен, у него цикл х из 10_000, мог бы использовать х, что бы не добавлять лишние действия. Но это не важно, главное знания про асинхронность он донес

  • @PizdaRusni2023
    @PizdaRusni2023 2 ปีที่แล้ว +2

    tasks в середину цикла. Почему не показать пример с батч генератором.

    • @luchanos
      @luchanos  2 ปีที่แล้ว

      хороший кейс, спасибо! покажу в переработанном материале)

  • @KereellOlorin
    @KereellOlorin ปีที่แล้ว

    Спешиал сенкс за отсылку к PEP 515 - Underscores in Numeric Literals. Забыл шо так можно.

  • @vilesovds
    @vilesovds 3 ปีที่แล้ว

    Интересно, а зачем create_pool асинхронный?

    • @luchanos
      @luchanos  3 ปีที่แล้ว +3

      Потому что подключение к базе тоже занимает время и может происходить с задержками

  • @RrRr-vf3gt
    @RrRr-vf3gt 2 ปีที่แล้ว +1

    Здравствуйте.
    ищу решение.
    У меня такая проблема. Основной код асинхронный, и при определённом выполнении условия должен создаваться новый тред/поток, который должен жить уже дальше своей жизнью. Но к сожалению выходит так, что создаётся новый потом внутри асинхронке и он стопорит всё, пока не закончит свою работу.
    Уже месяца 2 ищу как мне создать новый поток, который бы зарождался в асинхронке и жил своей жизнью. Может у кого есть идеи?
    ПС. Пожалуйста не пишите, мол зачем тебе, сделай асинхронно вообще всё. Это не решение моей задачи. Мне нужный асинхронный парсинг в процессе работы которого, выполняется условие и стартует грубо говоря отдельная программа. И мне нужно, что бы это был именно новый поток.
    Ни и что бы совсем усложнить задачу, количество будущих потоков неизвестно (динамическое).
    Кто знает решение такой задачи. Отзовитесь ))

    • @maxvakker7719
      @maxvakker7719 8 หลายเดือนก่อน

      Уже неактуально (

  • @PavelNebo
    @PavelNebo 19 วันที่ผ่านมา

    забыл убрать await sleep(.1)

  • @user-hn5bi3nw9y
    @user-hn5bi3nw9y ปีที่แล้ว

    +++

  • @donfedor007
    @donfedor007 2 ปีที่แล้ว +1

    Я экспериментировал с asyncio и библиотекой Jira. Не хотят они дружить(( У Вас нет не чего в этой теме?

    • @luchanos
      @luchanos  2 ปีที่แล้ว +1

      Никогда не слышал про библиотеку Jira, надо будет поугглить

  • @klayd4009
    @klayd4009 4 หลายเดือนก่อน

    Бесполезное видео. Вы не даете конкретики во времени выполнения. Много всяких излишеств. Раз уж вы показываете gather, то следовало бы использовать comprehension, заполняемый корутинами.

    • @luchanos
      @luchanos  4 หลายเดือนก่อน

      Сделайте видео лучше, я приду и оценю с удовольствием))

  • @VakaramGolang
    @VakaramGolang ปีที่แล้ว

    ахиреть как быстро стало работать.
    столкнулся с проблемой асинхронности с ТГ ботом на aiogram не хочет работать просто так с sqlite а мне она идеально подходит +-.
    Ну и шаг назад два вперёд , сейчас буду повторять код.

  • @MrSerg00000
    @MrSerg00000 ปีที่แล้ว

    круто нихера не понял где можно нормльно разобрать асинх у меня надо гет пост в панду сложить прилетит джсон после псот проверил методом раскидать по ядрам ну бустрее но ядра занимать не хочется
    # df['jsonreport'] = df.newbody.parallel_apply(self.apply_func)
    типо того на 4 быстрее чем просто апплай да ) но вот про асинхр пытаюсь понять как действовать ничига не понимаю(