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

Ответ

Для планирования и запуска задач по расписанию в Python применяются как встроенные в язык возможности, так и специализированные библиотеки.

Выбор инструмента зависит от сложности задачи и требований к инфраструктуре.

  1. schedule Простая и легковесная библиотека с читаемым синтаксисом. Идеальна для несложных периодических задач внутри одного процесса. Требует запуска бесконечного цикла для работы.

    import schedule
    import time
    
    def job():
        print("I'm working...")
    
    # Запускать задачу каждый день в 10:30
    schedule.every().day.at("10:30").do(job)
    
    while True:
        schedule.run_pending()
        time.sleep(1)
  2. APScheduler (Advanced Python Scheduler) Мощная и гибкая библиотека, поддерживающая постоянное хранение задач (persistent storage), различные типы триггеров (cron, interval, date) и запуск в фоновом режиме. Подходит для более сложных приложений.

    from apscheduler.schedulers.blocking import BlockingScheduler
    
    def some_job():
        print("Executing job")
    
    scheduler = BlockingScheduler()
    # Запускать задачу каждые 2 часа
    scheduler.add_job(some_job, 'interval', hours=2)
    scheduler.start()
  3. Celery Beat Планировщик для Celery — системы распределенных очередей задач. Используется в сложных, высоконагруженных системах для запуска периодических задач на кластере воркеров.

  4. Системные планировщики (cron, systemd timers) Наиболее надежный подход для production-окружений. Python-скрипт вызывается внешней утилитой операционной системы. Это разделяет логику приложения и логику планирования, обеспечивая отказоустойчивость.

    Пример строки для crontab:

    # Запускать скрипт каждый день в 3 часа ночи
    0 3 * * * /usr/bin/python3 /path/to/my/script.py

Итог: Для простых скриптов подойдет schedule, для сложных приложений — APScheduler, а для распределенных систем — Celery. В production рекомендуется использовать системные планировщики.

Ответ 18+ 🔞

Слушай, а вот эти твои задачи, которые по расписанию надо запускать — это ж целая наука, блядь! В Питоне вариантов дохуя, и все они такие разные, что голова кругом. Выбирай по обстоятельствам, а то накосячишь — потом будешь как Герасим, только «му-му» говорить от безысходности.

Ну, поехали разбираться, что тут у нас есть.

Первый кандидат — schedule.
Это как раз для тех, кто не хочет заморачиваться. Библиотека проще пареной репы, синтаксис читается почти как по-английски. Но, сука, есть нюанс — ей нужен вечный цикл, чтобы шевелиться. Запустил и сиди, как дурак, ждёшь, когда она отработает. Для мелких домашних скриптиков — самое то, а для чего-то серьёзного — ну, на любителя, блядь.

import schedule
import time

def job():
    print("I'm working...")

# Запускать задачу каждый день в 10:30
schedule.every().day.at("10:30").do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

Дальше — APScheduler (Advanced Python Scheduler).
Вот это уже серьёзная штука, ёпта! Тут тебе и крон-триггеры, и интервалы, и даже даты конкретные. Может задачи в базу складывать, чтобы они не испарились после перезагрузки. Для нормального, неигрушечного приложения — то, что доктор прописал. Гибкий, мощный, но и сложнее, конечно.

from apscheduler.schedulers.blocking import BlockingScheduler

def some_job():
    print("Executing job")

scheduler = BlockingScheduler()
# Запускать задачу каждые 2 часа
scheduler.add_job(some_job, 'interval', hours=2)
scheduler.start()

Третий зверь — Celery Beat.
А это уже для больших пацанов, у которых система распределённая, воркеры по кластерам разбросаны, и задачи летают туда-сюда как угорелые. Если у тебя не просто скрипт, а целая очередь задач, которые надо планировать — то это твой выбор. Но готовься, блядь, к настройке и администрированию — тут просто так не отделаешься.

И наконец, классика жанра — системные планировщики (cron, systemd timers).
Вот это, блядь, надёжно как швейцарские часы! Весь твой Питон-код живёт отдельно, а планировщик операционки просто пинками его будит в нужное время. Перезагрузка системы? Похуй! Упал процесс? Похуй! Cron своё дело сделает. Для продакшена — часто самый правильный путь, чтобы не выёбываться.

Пример строки для crontab:

# Запускать скрипт каждый день в 3 часа ночи
0 3 * * * /usr/bin/python3 /path/to/my/script.py

Итог, Колян:
Если пишешь мелкую утилиту для себя — бери schedule и не парься.
Если делаешь нормальное приложение с кучей фоновых задач — APScheduler тебе в помощь.
Если строишь распределённую систему — готовься к танцам с Celery.
А для продакшена, где надёжность на первом месте — доверяй старому доброму cron, он тебя не подведёт, в рот меня чих-пых!