Aioschedule: периодическая async-задача и её ограничения
Aioschedule предоставляет API расписания, похожий на schedule, для корутин asyncio. Задание регистрируется через every(...).do(...), а вызов run_pending проверяет, что пора исполнить. Самостоятельного фонового процесса библиотека не создаёт.
Пример расписания
import asyncio
import aioschedule
async def my_task():
print("Задача выполняется")
async def main():
aioschedule.every().minute.do(my_task)
while True:
await aioschedule.run_pending()
await asyncio.sleep(1)
asyncio.run(main())Перед использованием в новом проекте проверьте совместимость установленного aioschedule с вашей версией Python и тестовым заданием: совместимость зависит от того, как установленная версия библиотеки создаёт задачи asyncio. Не выдавайте успешную установку pip за успешную работу scheduler.
Что проверить до эксплуатации
- Выполняется ли корутина, а не просто создаётся объект coroutine.
- Что произойдёт при исключении: цикл должен оставаться управляемым, ошибка — наблюдаемой.
- Не блокирует ли задача event loop синхронным сетевым вызовом.
- Нужны ли сохранение заданий, восстановление после перезапуска и координация нескольких экземпляров.
Расписание и состояние находятся в памяти процесса. После остановки программы цикл не работает; автоматического восстановления пропущенных запусков обещать нельзя. Для небольшого интервала без календарных правил достаточно обычного цикла asyncio, а требования к надёжности нужно решать отдельно.