Загрузка...

База асинхронного программирования Python.

Тема в разделе Python создана пользователем RealMcLovin 2 дек 2024. 187 просмотров

  1. RealMcLovin
    RealMcLovin Автор темы 2 дек 2024 Заблокирован(а) 20 29 июл 2024
    Всем привет, друзья!

    Рассказываю базу о асинхронном программировании для новичков Python. Дабы помочь любимым новичкам, я решил создать эту тему (и пофармить симпатии).
    Что-ж, начинаем!

    Асинхронность в Python — это концепция программирования, которая позволяет выполнять задачи независимо друг от друга, без ожидания завершения предыдущих задач. Для использования асинхронного программирования в Python, необходимо знакомство с ключевыми словами async и await.​
    Вы, к примеру, читаете эту статью вечером. Скоро вам уже спать, так как завтра у вас важно мероприятие. Вот, вы уже ложитесь на теплую кровать, готовясь упасть в сон... Неужели вы будете смотеть все время сна на часы, что бы не опоздать на то самое мероприятие? Нет конечно, вы поставите будильник. Он сам решит, когда вас разбудить. В Python это работает так-же.

    Представим, что функция sleep() - процесс сна.

    А функция alert() - пробуждение.

    Python
    def sleep():
    # сон...
    def alert():
    time.sleep(...)
    # срабатывание будильника...
    Вроде все идеально, но есть одна проблема... Мы не можем запустить функцию сна без будильника, так как мы проспим мероприятие! Но если мы включим будильник - то мы не сможем спать. Почему? Да потому что если мы запустим функцию alert() - нам придется ждать время, но сработает будильник и сна не будет. Асинхронность поможет нам и поспать - и пойти на мероприятие. Как? Узнаем в следующем блоке.
    Для начала нам необходимо скачать библиотеку asyncio. после этого опять строим две функции.

    Python
    import asyncio
    import time

    async def alert():
    time.sleep(10)
    print("Просыпаемся!")

    async def sleep():
    asyncio.create_task(alert())
    print("Поставил будильник и сплю...")

    asyncio.run(sleep())
    Что же я тут расписал? :hmm:
    Давайте разберем. Для того, что бы функция стала асинхронной - нам надо добавить 'async' перед обьявлением функции 'def'.
    Это мы сделали в двух функциях, в функции alert() для того, что бы мы не ждали будильника, а в функции sleep() потому, что вызвать асинхронную функцию из обычной нельзя. Но как же поступить, если мы попадаем в бесконечный цикл? В этом нам поможет как раз asyncio!
    В конце кода мы добавили - asyncio.run()!
    Эта функция запускает асинхронную функцию из любой функции. У нас она вызывает sleep(). Что же делает функция asyncio.create_task()? Запускает эту функцию, но не ждет ее выполнения. При запуске мы видим, что функция сна выполняется вне зависимости от функции будильника. И вот, мы с вами построили первую асинхронность.​
    Если вы хотите сделать множество задач асинхронными - ничего сложного нет, просто необходимо запустить несколько задач.

    Python
    task1 = asyncio.create_task(first())
    task2 = asyncio.create_task(second())
    # ...
    Но! Если вы используете 2 функции с time.sleep() - они не будут работать. Что бы асинхронно поставить, например, 2 таймера - используем функцию await asyncio.sleep(), она не будет останавливать код.
    :amura: Итак, мы с вами научились строить асинхронные функции в Python. Вы сможете оптимизировать свой код, да и просто узнали что то новое. Не видел раньше такую тему на форуме, может я и просвятил какого нибудь новокека и он стал востребованным специальстом.
    Всем удачи и всем пока!
     
    2 дек 2024 Изменено
  2. Stalkie
    Stalkie 2 дек 2024 102 8 апр 2017
    Ахуеть пойду скачаю
     
    1. RealMcLovin Автор темы
Top
Загрузка...