Это абсолютный минимум того, что нужно знать про Асинхронный Python и библиотеку Asyncio.
Описание:
1. Введение - небольшое повторение основных понятий
2. Объекты корутин и асинхронные функции - тоже можно считать повторением
3. Задачи (asyncio.Task), их создание, отмена, функции wait_for() и shield()
4. Что делает await и run()
5. Асинхронные контекстные менеджеры async with
6. Функция .gather() и группы задач
7. Проблемы, связанные с await
8. Использование класса TaskGroup() вместо gather и синтаксис except*
9. Отмена задач при использовании .gather() и TaskGroup()
10. Асинхронные итераторы и async for
11. Асинхронные comprehensions (генераторы списков, словарей множеств)
12. Асинхронные генераторы и опять про контекстные менедежеры
13. Очереди - детальный, пошаговый туториал
14. Очереди: Практический пример и запуск синхронного кода из асинхронного
15. Синхронизация корутин - Замки (Lock)
16. Синхронизация корутин - Семафоры (Semaphore)
17. Синхронизация корутин - События (Event)
18. Синхронизация корутин - Условия (Condition)