Объясните как под капотом работает метод start_polling у aiogram3 в связке с обычным запуском асинхронных задач через asyncio?
Есть следующая функция запускаемая через asyncio.run(main())
async def main():
bot = Bot(token)
dp = Dispatcher()
task = asyncio.create_task(monitor_remind())#такой конструкцией создается подзадача
await task # и мы ожидаем ее полного выполнения без нее если в коде встречается await asyncio.sleep(5) оставшийся код в этой функции не выполняется
await dp.start_polling(bot)
Но если мы запустим код, бот не запустится и будет работать только запущенная функция "monitor_remind()".
Код "monitor_remind()"
async def monitor_remind():
while True:
print("test")
await asyncio.sleep(5)
При запуске же такова кода все отлично работает:
async def main():
bot = Bot(token)
dp = Dispatcher()
asyncio.create_task(monitor_remind())
await dp.start_polling(bot)
И при запуске этого кода в функции "monitor_remind()" при встрече await asyncio.sleep(5) код продолжает работать. Объясните пожалуйста как это под капотом работает и из-за чего так получается.
Ответы (1 шт):
Автор решения: eri
→ Ссылка
await task # и мы ожидаем ее полного выполнения
бот не запустится до окончиания "ожидаем ее полного выполнения". не нужно ожидать тасков с вечными циклами - пусть живут сами по себе