img

Погружение в aiogram (#0 Основы асинхронного программирования asyncio)

icon strelka icons icons

узнай больше на курсе

DevOps-инженер с нуля
Стань DevOps-инженером с нуля и научись использовать инструменты и методы DevOps
Укажите вашу электронную почту
Неверный адрес электронной почты
Нажимая на кнопку, вы соглашаетесь на обработку персональных данных
Готово!
Отправили доступы на вашу
электронную почту
Полный курс по сетевым технологиям
Полный курс по сетевым технологиям от Мерион Нетворкс - учим с нуля сетевых инженеров и DevOPS специалистов
Укажите вашу электронную почту
Неверный адрес электронной почты
Нажимая на кнопку, вы соглашаетесь на обработку персональных данных
Готово!
Отправили доступы на вашу
электронную почту
Python программист с нуля
Стань разработчиком на одном из самых популярных языков программирования - Python
Укажите вашу электронную почту
Неверный адрес электронной почты
Нажимая на кнопку, вы соглашаетесь на обработку персональных данных
Готово!
Отправили доступы на вашу
электронную почту

Введение

На сегодняшний день боты стали неотъемлемой частью нашей жизни. Они помогают в автоматизации процессов, экономии человеческих ресурсов (Скайнет привет 👋), образовании и развлечении. Почти не осталось тех мест, где бы нельзя было использовать бота. И мы здесь для того, чтобы понять, что это такое и как с этим работать. 

НО для начала, необходимо уяснить некоторые тонкости асинхронного программирования Python

Если ещё не знакомы с языком Python, то у меня для вас отличные новости -> Python с нуля

Немного теории

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

Если перенести это на программу, то приготовление супа это основной поток выполнения программы, а поход в магазин и просмотр сериалов это задачи (Корутины), которые выполняются одновременно, не мешая друг другу.

А что это за непонятное слово - Корутины?!

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

Для реализации асинхронного программирования в Python, есть прекрасная библиотека asyncio.

Установка библиотеки

(Note: здесь и в дальнейших статьях я буду все примеры кода запускать в IDE PyCharm и использовать версию Python 3.9)

Для начало установим библиотеку asyncio в только что созданный проект.

Для продвинутых программистов: можно воспользоваться командой: pip install asyncio

Для тех у кого лапки. 

Находим: Settings -> Project <ИмяПроекта> -> Python Interpreter->

->

После успешной установки пакета, открываем файл и начинаем творить.

Практика

Подключаем библиотеку asyncio и напишем три функции.

async def watch_serials() - Функция для просмотра сериала, которая непрерывно, каждые 5 секунд, отправляет в терминал текст сообщения: “Я смотрю сериалы”.

async def shop_bread() - Функция похода в магазин за хлебом, которая непрерывно, каждые 2 секунды, отправляет текст сообщение: “Я иду в магазин”.

async def cooking_soup() - Функция приготовления мамой супа, которая будет основным потоком выполнения программы. 

Я добавил while True: ,чтобы зациклить выполнение программы.

Сразу давайте оговоримся, что же такое async?

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

Задержку вывода сообщения организовали за счет встроенного ключевого слова await.

Давайте более подробно разберем написанный код.

await asyncio.sleep(время в сек.)

Данная функция аналогична функции 
time.sleep(время в сек.) за тем лишь исключением, что функция await asyncio.sleep(время в сек.) не блокирует выполнение основного потока программы. Это означает, что она выполняется асинхронно, и пока в одном месте программы, где есть эта функция, мы ждём, завершения задержки, основному потоку ничто не мешает выполнять любой другой участок кода, как в нашем случае функцию похода в магазин.

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

Теперь когда мы написали наши корутины, необходимо создать задачи выполнения в основном потоке программы. 

В функции cooking_soup() создаем наши задачи для запуска их выполнения с помощью функции asyncio.create_task(корутина)

И ставим отдельный поток на их выполнения с помощью строки await task_1.

Запускаем выполнение нашего основного потока, то есть функцию cooking_soup() с помощью метода run() библиотеки asyncio

asyncio.run(cooking_soup())

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

Код программы

import asyncio

async def watch_serials():

   while True:

       await asyncio.sleep(5)

       print('Я смотрю сериалы "Task_1"')

async def shop_bread():

   while True:

       await asyncio.sleep(2)

       print('Я иду в магазин "Task_2"')

async def cooking_soup():

   task_1 = asyncio.create_task(watch_serials())

   task_2 = asyncio.create_task(shop_bread())

   await task_1

   await task_2

if __name__ == '__main__':

   asyncio.run(cooking_soup())

Заключение

Вот мы и рассмотрели основы асинхронного программирования, которые в дальнейшем помогут нам понять логику работы телеграмм бота, написанного с использование асинхронной библиотеки aiogram.

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
icon strelka icons icons

узнай больше на курсе

DevOps-инженер с нуля
Стань DevOps-инженером с нуля и научись использовать инструменты и методы DevOps
Подробнее о курсе
Полный курс по сетевым технологиям
Полный курс по сетевым технологиям от Мерион Нетворкс - учим с нуля сетевых инженеров и DevOPS специалистов
Подробнее о курсе
Python программист с нуля
Стань разработчиком на одном из самых популярных языков программирования - Python
Подробнее о курсе
Онлайн-курс по кибербезопасности
Полный курс по кибербезопасности от Мерион Нетворкс - учим с нуля специалистов по информационной безопасности. Пора стать безопасником!
Подробнее о курсе
Онлайн-курс по Linux
Курс по Linux от Мерион Нетворкс - стань Linux администратором, прокачай свой скиллсет умением работать с операционными системами линукс и сделай большой шаг к DevOps
Подробнее о курсе
Автоматизированное тестирование на Python
Изучите автоматизацию тестирования на Python чтобы стать востребованным специалистом
Подробнее о курсе
Еще по теме:
img
Подробнейший гайд о самой актуальной и востребованной профессии в ИТ
img
Рассказываем про профессию, где можно легально и за хорошие деньги почувствовать себя хакером
img
Рассказываем, как наука о данных помогает бизнесу в различных сферах
img
Рассказываем, какие специальности наиболее перспективны в сфере науки о данных
img
Онлайн-обучение стало популярным способом освоения новой профессии, но не все курсы оправдывают ожидания. Мы собрали советы, которые помогут извлечь реальную пользу из образовательных программ и сделать обучение эффективным.
Весенние скидки
30%
50%
60%
До конца акции: 30 дней 24 : 59 : 59