Зачем в aiogram везде async и await? Можно без них?
В каждом примере aiogram функции пишут как async def, а перед отправкой стоит await message.answer(...). Я не понимаю что это и зачем. Если убрать async/await, бот ругается. Объясните на пальцах.
2 ответа
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 это не каприз, а обязательное правило.
Простая памятка для новичка: видишь функцию из aiogram/bot — ставь перед ней await, а функцию-обёртку делай async def. Глубоко вникать в устройство asyncio пока не надо, на старте достаточно следовать этому правилу.