Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
Библиотека asyncio - продолжение
Продолжение материала по asyncio.
Для начала перепишем программу из предыдущей статьи. Будем хранить создаваемые задачи (экземпляры корутины) в списке. Собственно это сразу напрашивалось.
Результат работы программы
Как и ранее задача создаётся методом asyncio.create_task(). Оператор await в цикле делегирует управление соответствующим задачам.
Замечание важное
Цикл по всем задачам (await t, см. Рисунок 1) можно заменить всего одной строкой
await asyncio.gather(*tsks)
и это удобно
Библиотека asyncio позволяет фиксировать задачи, которые первыми закончат работу. Программа внизу, как раз демонстрирует вывод тех задач, которые закончили работу.
Возможный вариант результата запуска программы
Первыми закончили 2 8
Далее 1 7 3 5 0 6 9 4
Пояснение к программе
- Создаётся 10 задач, каждая из которых выжидает случайное время, а потом заканчивает работу. Поэтому, кстати, может оказаться, что одновременно первыми закончат несколько задач.
- Ожидание конца первых, закончивших работу, задач можно методом
await asyncio.wait(tsks, return_when=asyncio.FIRST_COMPLETED) - Задача, которая заканчивает свою работу, фиксируется в списке ls.
Пока всё!
Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.