Долго пугался слова «асинхронность», воображал страшный параллельный мир. Никак не давалась связка async/await — как будто магия. Пока однажды не прочитал простое: пока мы ждём ответ от сети или базы (input/output), процессор свободен, и можно позвать следующую задачу. Весь async — про то, чтобы не простаивать в ожидании.
Нейтрально: async позволяет стартовать ожидание и заниматься другим делом, а await — «подождать завершения вот этого». Отлично для сети/файлов, но не ускорит «просто сложные вычисления».
import asyncio
async def fetch_one(user_id):
# имитация долгого запроса (сеть/БД)
await asyncio.sleep(1) # здесь — ожидание, процессор свободен
return user_id * 10
async def main():
# запускаем несколько запросов «параллельно» по ожиданию
results = await asyncio.gather(fetch_one(1), fetch_one(2), fetch_one(3))
print(results) # [10, 20, 30]
asyncio.run(main())
Когда понял «асинхронность — про ожидание ввода-вывода, а не про магическое ускорение циклов», мир стал проще. Теперь слова async/await из расчёта читаю спокойно — понимаю, когда их применяют (сеть), а когда они лишние.