Ответ
Запуск Celery требует как минимум трех компонентов: приложения с задачами, брокера сообщений (например, Redis или RabbitMQ) и самого воркера, который будет выполнять задачи.
1. Установка зависимостей
Установите Celery и клиент для брокера (в данном примере Redis).
pip install celery redis
2. Определение задач
Создайте файл tasks.py, где будет настроено приложение Celery и определены фоновые задачи.
# tasks.py
from celery import Celery
import time
# Инициализация Celery с указанием имени приложения и URL брокера
app = Celery('tasks', broker='redis://localhost:6379/0')
@app.task
def add(x, y):
time.sleep(5) # Имитация долгой операции
return x + y
3. Запуск воркера
Откройте терминал и запустите воркер. Он подключится к брокеру и будет ожидать поступления задач.
celery -A tasks worker --loglevel=info
-A tasks: Указывает на модуль (tasks.py), где находится экземпляр Celery (app).worker: Команда для запуска воркера.--loglevel=info: Устанавливает уровень логирования для отладки.
4. Вызов задачи из основного кода
Теперь в вашем основном приложении (например, в Django или FastAPI) вы можете асинхронно вызывать задачу с помощью метода .delay().
from tasks import add
# Задача не блокирует основной поток, а отправляется в очередь брокера
result = add.delay(4, 4)
print(f"Task sent! ID: {result.id}")
Воркер получит задачу из очереди и выполнит ее в фоновом режиме.
Для периодических задач (Celery Beat):
Если вам нужно запускать задачи по расписанию, дополнительно запускается планировщик beat:
celery -A tasks beat --loglevel=info
Ответ 18+ 🔞
Так, слушай, а вот эта вся хуйня с Celery, она же, блядь, как трёхголовый дракон, ёпта! Чтобы его запустить, тебе нужно три штуки, и все они должны друг друга не сожрать.
1. Ставим всё, что надо
Сначала, понятное дело, качаем сам Celery и брокера. Возьмём для простоты Redis, он как шустрый гопник в подворотне — быстро передаёт сообщения.
pip install celery redis
Всё, теперь у тебя есть инструменты, а мозгов, блядь, ещё нет.
2. Пишем задачи, которые будут выполняться
Создаёшь файлик tasks.py. Тут ты, сука, объявляешь, что за хуйню ты хочешь делать в фоне.
# tasks.py
from celery import Celery
import time
# Вот это — сердце системы. Говорим: "Слушай, чувак, брокер твой сидит на редисе по такому-то адресу".
app = Celery('tasks', broker='redis://localhost:6379/0')
@app.task
def add(x, y):
time.sleep(5) # Представь, что это какая-то тяжёлая операция, типа считать зарплату за год
return x + y
Вот, задача add теперь не просто функция, а, блядь, поручение для раба-воркера.
3. Запускаем самого воркера
Открываешь терминал и пишешь магическую команду. Это как крикнуть в пустоту: "Эй, работяги, есть работа!"
celery -A tasks worker --loglevel=info
-A tasks— это ты показываешь пальцем на файлtasks.py, где твоё приложение живёт.worker— команда "начинай пахать, сука".--loglevel=info— чтобы он не молчал как партизан, а рассказывал, что делает. Иначе потом будешь гадать, почему всё сломалось, а он тебе ни слова.
4. Кидаем задачу из основного кода
А теперь самое интересное. В своём основном приложении (допустим, каком-нибудь веб-сервере) ты не ждёшь 5 секунд, а просто швыряешь задачу в очередь и идёшь дальше, как будто так и надо.
from tasks import add
# Метод .delay() — это как крикнуть через окно: "Сделай это, когда сможешь!"
result = add.delay(4, 4)
print(f"Task sent! ID: {result.id}")
Воркер её подхватит, сделает, а ты уже можешь пользователю ответ отдавать. Красота, блядь!
А если по расписанию? (Celery Beat)
А, хочешь, чтобы задачи сами запускались, как по будильнику? Тогда, сука, нужен ещё один демон — планировщик.
celery -A tasks beat --loglevel=info
Запускаешь эту строку, и он будет, как пунктуальный немец, в нужное время пинать воркеров на работу. Главное — не перепутай, а то получится ебушки-воробушки, и всё полетит к чёртовой матери.