SmartQuery /ВОПРОС → ПРИМЕР → ПОНЯТНЫЙ ОТВЕТ
Языки и платформы

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, а требования к надёжности нужно решать отдельно.

Документация