Найти тему

Программирование на языке Python. Асинхронное программирование. Библиотека asyncio. Статья 1

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Асинхронное программирование на python с использованием библиотеки asyncio

У меня на канале есть целая подборка, посвящённая многозадачности. А что такое стандартная библиотека asyncio? Эта такая обёртка к многозадачности, которая упрощает реализацию параллельного (или конкурентного, если буквально переводить слово concurrent) выполнения задач. Как это реализовано в библиотеке asyncio - я не знаю, но в целом библиотека удалась и работать в ней довольно удобно. В простейших случаях, как мы увидим ниже, всё довольно просто.

Ниже представлена программы, в которой параллельно выполняются три функции: fn1(), fn2(), fn3().

Рисунок 1. Пример просто программы с использованием библиотеки asyncio. Текст программы можно получить ниже по ссылке
Рисунок 1. Пример просто программы с использованием библиотеки asyncio. Текст программы можно получить ниже по ссылке
primer328.py

Результат выполнения программы см. рисунок 2

Рисунок 2. Результат работы программы на рисунке 1
Рисунок 2. Результат работы программы на рисунке 1

Пояснения к программе

  • Что в первую очередь следует отметить? Функции, которые будут выполняться асинхронно должны заменяться корутинами. От английского coroutine, т.е. сопрограмма. Для этого используется префикс async.
  • Также, если необходимо, чтобы цикл был асинхронным, также используется префикс async (см. циклы for в функциях).
  • Запуск корутины осуществляется методом asyncio.create_task(). Но далее используется оператор await, который делегирует выполнение действий в другую корутину (задачу).
  • Особо следует отметить итераторы. Функция range() уже не подойдёт, но можно создать свой итератор аналог range(): a_range(). Итератор создаётся известным уже нам методом с использованием yield.
  • flush в функции print() используется, чтобы сразу сбрасывать вывод в консоль.

Изучение библиотеки asyncio продолжится.

Пока всё!

Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.

Дерево живёт независимо от меня
Дерево живёт независимо от меня