Ответ
Для планирования и запуска задач по расписанию в Python применяются как встроенные в язык возможности, так и специализированные библиотеки.
Выбор инструмента зависит от сложности задачи и требований к инфраструктуре.
-
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) Мощная и гибкая библиотека, поддерживающая постоянное хранение задач (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() -
Celery BeatПланировщик для Celery — системы распределенных очередей задач. Используется в сложных, высоконагруженных системах для запуска периодических задач на кластере воркеров. -
Системные планировщики (
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, он тебя не подведёт, в рот меня чих-пых!