🕓 Как задать запуск задачи в Celery на определенное время?
Детальный ответ
Запуск задач в Celery по расписанию
Привет! В этой статье я расскажу тебе, как использовать Celery для запуска задач по расписанию. Celery - это популярный асинхронный фреймворк для обработки задач в Python. Он позволяет выполнять тяжелые вычисления или задачи, которые требуют много времени, в фоновом режиме без блокирования основного потока выполнения.
Установка Celery
Для начала, убедись, что у тебя уже установлен Celery. Если его нет, установи его с помощью следующей команды:
pip install celery
Определение задачи
Прежде чем мы перейдем к запуску задач по расписанию, давай создадим простую задачу, которую мы будем выполнять. Создай файл с именем tasks.py
и добавь следующий код:
from celery import Celery
app = Celery('tasks', broker='pyamqp://guest@localhost//')
@app.task
def add(x, y):
return x + y
В этом коде мы создаем экземпляр Celery и определяем задачу с именем "add". Задача "add" просто складывает два числа и возвращает результат.
Запуск задачи по расписанию
Теперь мы готовы перейти к запуску задач по расписанию. В Celery есть несколько способов запуска задач по расписанию, но одним из самых простых является использование модуля beat
. Beat - это специальный процесс Celery, который выполняет задачи по расписанию.
Давай создадим файл с именем celery.py
и добавим следующий код:
from celery import Celery
from celery.schedules import crontab
from tasks import add
app = Celery('tasks', broker='pyamqp://guest@localhost//')
app.conf.beat_schedule = {
'add-every-minute': {
'task': 'tasks.add',
'schedule': crontab(minute='*/1'),
'args': (16, 16),
},
}
В этом коде мы импортируем модуль Celery
, модуль crontab
из celery.schedules
и нашу задачу add
из модуля tasks
. Затем мы создаем экземпляр Celery и настраиваем планировщик beat через атрибут app.conf.beat_schedule
.
В нашем примере задача add
будет выполняться каждую минуту. Мы указываем это, устанавливая расписание планировщика crontab(minute='*/1')
. Мы также передаем аргументы для задачи через атрибут args
.
Запуск Celery Beat
Теперь мы готовы запустить Celery Beat. Чтобы это сделать, открой новый терминал и введи следующую команду:
celery -A celery beat --loglevel=info
Эта команда запускает Celery Beat и выводит информационные сообщения в терминале. Если всё настроено правильно, ты увидишь, что задача "add" будет выполняться каждую минуту.
Также можеш проверить, что задача действительно запускается, добавив вывод в функцию add
:
from celery import Celery
app = Celery('tasks', broker='pyamqp://guest@localhost//')
@app.task
def add(x, y):
result = x + y
print(f"The result is {result}")
return result
Сохрани изменения и перезапусти Celery Beat. Если всё работает правильно, ты будешь видеть сообщение с результатом в терминале при каждом запуске задачи.
Заключение
В этой статье мы рассмотрели, как использовать Celery для запуска задач по расписанию. Мы определили простую задачу и настроили Celery Beat для выполенения этой задачи каждую минуту. Теперь у тебя есть хорошая основа, чтобы начать использовать Celery в своих проектах и запускать задачи по расписанию.