Найти в Дзене
MakeBetter[Code] Blog

[➰] Asyncio | Часть 1 - Основы

Оглавление
via Stable Diffusion 1.5
via Stable Diffusion 1.5

Asyncio - это модуль в Python, который предоставляет инфраструктуру для написания асинхронного кода с использованием корутин, циклов событий и других функций.

Асинхронный код - это тип программирования, при котором поток выполнения не блокируется ожиданием завершения операций ввода/вывода. Вместо этого другие части программы могут продолжать выполняться, пока выполняется операция.

Asyncio предоставляет способ написания асинхронного кода в структурированной и организованной манере, что облегчает его чтение и сопровождение.

Циклы событий используются для управления выполнением корутин и координации операций ввода/вывода.

Что такое корутины?

Корутины - это ключевая особенность asyncio и способ написания асинхронного кода в Python. Корутина - это функция, которая может быть приостановлена и возобновлена во время выполнения, что позволяет другим частям программы продолжать выполнение, пока корутина ожидает завершения какой-либо операции.

В Python корутины определяются с помощью ключевого слова async перед определением функции. Когда корутина вызывается, она возвращает объект coroutine, который затем может быть запланирован и выполнен циклом событий.

Корутины похожи на генераторы в Python, но имеют некоторые важные отличия. Как и генераторы, корутины используют ключевое слово yield для приостановки и возобновления выполнения. Однако корутины также могут получать значения от вызывающего кода с помощью метода send(), что позволяет им взаимодействовать с остальной частью программы.

Корутины являются эффективным инструментом для написания асинхронного кода, поскольку они позволяют разработчикам писать код, который выглядит синхронным, но на деле является асинхронным.

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

Ключевые понятия в asyncio

Циклы событий

Цикл событий - это основной компонент asyncio, который управляет планированием и выполнением корутин. Он отслеживает операции ввода/вывода и планирует выполнение программ, когда они готовы к выполнению.

Задачи

Задача - это абстракция asyncio, представляющая собой корутину, которая в данный момент выполняется циклом событий. Задачи используются для управления выполнением корутин и отслеживания их хода.

Future

Future - это объект, который представляет собой конечный результат асинхронной операции. Он похож на promise в других языках. Future можно использовать для координации выполнения нескольких корутин и для обработки ошибок и исключений.

Синтаксис async/await

Ключевые слова async и await используются в asyncio для определения и вызова корутин. async используется для определения корутины, а await - для вызова корутины и ожидания её результата.

Пример асинхронного кода

-2
  1. В первой строке мы импортируем модуль asyncio, который мы будем использовать для определения нашей корутины и создания цикла событий.
  2. async def my_coroutine() определяет корутину под названием my_coroutine(), используя синтаксис async def. Корутина печатает сообщение о начале работы, ждет 1 секунду, используя asyncio.sleep(), а затем печатает еще одно сообщение о завершении работы.
  3. loop = asyncio.get_event_loop() создает цикл событий и присваивает его переменной loop.
  4. task = loop.create_task(my_coroutine()) планирует выполнение нашей корутины в цикле событий с помощью функции loop.create_task() и присваивает полученный объект asyncio.Task переменной task.
  5. loop.run_until_complete(task) запускает цикл событий с помощью функции loop.run_until_complete(), передавая в качестве аргумента наш объект asyncio.Task. Это запустит выполнение нашей корутины и будет действовать до тех пор, пока она не завершится.

🎉✨ Поздравляю с завершением чтения статьи

Если Вам понравилось, можете подписаться, оставить комментарий и поставить лайк.

Также, можете взглянуть на некоторые из моих других публикаций, чтобы найти еще больше отличного контента 🔥:

[🍃] Паттерн "Фабрика" в Python | Ключевые знания для начинающих
MB Magazine23 апреля 2023
[🍃] Паттерн Singleton в Python | Ключевые знания для начинающих
MB Magazine23 апреля 2023
[🔢] NumPy | Часть 1 - Основы
MB Magazine18 апреля 2023