← Все вопросы

Зачем в aiogram везде async и await? Можно без них?

Задан 20 месяцев назад736 просмотров2 ответа
6

В каждом примере aiogram функции пишут как async def, а перед отправкой стоит await message.answer(...). Я не понимаю что это и зачем. Если убрать async/await, бот ругается. Объясните на пальцах.

2 ответа

11
✓ Принятый ответ — помог автору

async и await — это про асинхронность, то есть умение делать несколько дел не блокируя друг друга.

Представь бота, которому одновременно пишут 100 человек. Отправка сообщения в Telegram идёт через интернет и занимает время. Если бы бот ждал ответа сервера «впустую», он завис бы для всех остальных на это время. Асинхронность позволяет: пока ждём ответ по одному пользователю — обрабатывать других.

На практике правила простые:

  • хендлеры всегда async def;
  • перед всеми «телеграмными» действиями (message.answer, bot.send_message и т.п.) ставь await — это значит «дождись результата, но не блокируй остальных».
@dp.message()
async def handler(message: Message):
    await message.answer("привет")  # await обязателен

Если убрать await, сообщение просто не отправится (создастся «корутина», но не запустится), а Python ещё и предупредит об этом. Так что в aiogram это не каприз, а обязательное правило.

4

Простая памятка для новичка: видишь функцию из aiogram/bot — ставь перед ней await, а функцию-обёртку делай async def. Глубоко вникать в устройство asyncio пока не надо, на старте достаточно следовать этому правилу.

Ваш ответ

Войдите, чтобы ответить на вопрос.