Как дождаться завершения работы всех фоновых задач при помощи asyncio?
Для того чтобы дожидаться завершения выполнения всех независимых задач — сначала надо получить множество, содержащее все работающие задачи, воспользовавшись функцией asyncio.all_tasks().
Дождаться завершения всех этих задач, ничего больше не предприняв, нельзя. Такой ход приведёт к бесконечной блокировке программы, так как одной из задач, завершения которой мы будем ждать, окажется текущая задача.
Чтобы не столкнуться с такой проблемой — надо получить объект asyncio.Task для текущей задачи и исключить его из множества.
Для получения текущей задачи нужно вызвать метод asyncio.current_task(), возвращающий текущую корутину, сохранить её, а потом удалить из множества с помощью метода remove().
После этого можно дождаться завершения работы всех оставшихся задач с помощью asyncio.wait().
Полный пример выглядит так:
Отметьте свой прогресс