Как запустить шедулер aioschedule, не блокируя asynctelebot
Всем привет! Пишу телеграм бот на AsyncTelebot, столкнулся с такой проблемой, что не удается запустить шедулер, не блокируя работу бота. Есть следующий фрагмент кода:
import asyncio
import aioschedule as schedule
...
async def send_price_update_notifications():
print("Check notifications: " + str(datetime.datetime.now()))
...
async def send_notifications():
await send_price_update_notifications()
async def run_notifications():
schedule.every(10).seconds.do(send_notifications)
while True:
await schedule.run_pending()
await asyncio.sleep(0)
async def start_bot():
while True:
await bot.polling(none_stop=True)
await asyncio.sleep(0)
async def main():
task1 = asyncio.create_task(run_notifications())
task2 = asyncio.create_task(start_bot())
await asyncio.gather(task1, task2)
if __name__ == '__main__':
asyncio.run(main())
В результате шедулер выполняется, а бот в телеграме на запросы не реагирует. При отключении шедулера бот снова начинает работать. Разбирался с конкурентным выполнением кода и asyncio, вроде как возвращаю управление из каждой корутины в конце выполнения в общий event loop, но, судя по всему, не до конца разобрался и не вижу каких-то деталей. Подскажите, пожалуйста, куда копать?
Источник: Stack Overflow на русском