Загрузка...

Python Asynchronous Programming Foundation.

Thread in Python created by RealMcLovin Dec 2, 2024. 185 views

  1. RealMcLovin
    RealMcLovin Topic starter Dec 2, 2024 Banned 20 Jul 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. Stalkie
    Stalkie Dec 2, 2024 102 Apr 8, 2017
    Ахуеть пойду скачаю
     
    1. RealMcLovin Topic starter
Top
Loading...