Какие инструменты используются для планирования задач (шедулинга) в Python

Ответ

Для планирования и периодического выполнения задач в Python применяются различные библиотеки и фреймворки, выбор которых зависит от сложности и масштаба системы.

Основные инструменты:

  1. APScheduler (Advanced Python Scheduler) Гибкая библиотека для планирования задач внутри приложения. Поддерживает постоянное хранение задач и различные триггеры (интервалы, cron-подобные расписания, конкретные даты). Почему: Идеально подходит для монолитных приложений, где планировщик должен работать в том же процессе.

    from apscheduler.schedulers.blocking import BlockingScheduler
    import datetime
    
    def my_job():
        print(f"Задача выполнена в {datetime.datetime.now()}")
    
    scheduler = BlockingScheduler()
    # Запускать каждые 10 секунд
    scheduler.add_job(my_job, 'interval', seconds=10)
    scheduler.start()
  2. Celery Beat Планировщик для распределенной системы очередей задач Celery. Позволяет запускать задачи по расписанию на любом из воркеров. Почему: Стандарт де-факто для асинхронных и периодических задач в распределенных системах и веб-фреймворках (Django, Flask).

    # В конфигурации Celery (celery.py)
    from celery import Celery
    from celery.schedules import crontab
    
    app = Celery('tasks', broker='redis://localhost:6379/0')
    
    @app.on_after_configure.connect
    def setup_periodic_tasks(sender, **kwargs):
        # Выполнять каждый день в 7:30 утра
        sender.add_periodic_task(
            crontab(hour=7, minute=30),
            my_task.s('hello'),
        )
  3. schedule Простая и легковесная библиотека с очень читаемым API для базовых задач планирования. Почему: Отличный выбор для простых скриптов и задач, не требующих высокой надежности или постоянного хранения.

    import schedule
    import time
    
    def job():
        print("Я работаю...")
    
    schedule.every(10).minutes.do(job)
    schedule.every().hour.do(job)
    schedule.every().day.at("10:30").do(job)
    
    while True:
        schedule.run_pending()
        time.sleep(1)
  4. Cron (на уровне ОС) Классический системный планировщик. Python-скрипт просто вызывается по расписанию, заданному в crontab. Почему: Максимально надежный и не зависит от состояния приложения. Хорош для задач обслуживания (бэкапы, очистка логов).

  5. Airflow / Prefect Полноценные платформы для оркестрации сложных конвейеров данных (DAG), где задачи зависят друг от друга. Почему: Используются для ETL/ELT процессов и сложных рабочих циклов, требующих мониторинга, логирования и перезапусков.