Найти тему
programmer's notes (python and more)

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

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

Библиотека asyncio - продолжение

Продолжение материала по asyncio.

Для начала перепишем программу из предыдущей статьи. Будем хранить создаваемые задачи (экземпляры корутины) в списке. Собственно это сразу напрашивалось.

Рисунок 1. Хранение созданных асинхронных задач в массиве. Текст программы см. ниже по ссылке
Рисунок 1. Хранение созданных асинхронных задач в массиве. Текст программы см. ниже по ссылке
primer329.py

Результат работы программы

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

Как и ранее задача создаётся методом asyncio.create_task(). Оператор await в цикле делегирует управление соответствующим задачам.

Замечание важное
Цикл по всем задачам (await t, см. Рисунок 1) можно заменить всего одной строкой
await asyncio.gather(*tsks)
и это удобно

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

Рисунок 3. Фиксация первых задач, закончивших работу. Текст программы см. ниже ссылке
Рисунок 3. Фиксация первых задач, закончивших работу. Текст программы см. ниже ссылке
primer330.py

Возможный вариант результата запуска программы

Первыми закончили 2 8
Далее 1 7 3 5 0 6 9 4

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

  • Создаётся 10 задач, каждая из которых выжидает случайное время, а потом заканчивает работу. Поэтому, кстати, может оказаться, что одновременно первыми закончат несколько задач.
  • Ожидание конца первых, закончивших работу, задач можно методом
    await asyncio.wait(tsks, return_when=asyncio.FIRST_COMPLETED)
  • Задача, которая заканчивает свою работу, фиксируется в списке ls.

Пока всё!

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

Всё таки в асинхронном программировании лучше должны разбираться женщины
Всё таки в асинхронном программировании лучше должны разбираться женщины