«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Запуск задания Cron в Django с использованием Celery и Docker

Запуск задания Cron в Django с использованием Celery и Docker

Опубликовано 1 сентября 2024 г.
Просматривать:989

Running a Cron Job in Django Using Celery and Docker

Введение в Cron Jobs

Задание cron — это запланированная задача, которая запускается автоматически через определенные промежутки времени. Эти задачи полезны для автоматизации повторяющихся операций, таких как рассылка электронных писем с напоминаниями, создание отчетов или очистка баз данных. В проекте Django задания cron можно настроить с помощью таких инструментов, как Celery, что делает планирование задач и управление ими простым и эффективным.

Настройка вашего проекта Django

Давайте начнем с создания проекта Django, установки необходимых пакетов, а затем контейнеризации проекта с помощью Docker.

Создайте виртуальную среду и установите Django и DRF.

  • Откройте терминал и перейдите в каталог вашего проекта.
  • Создайте и активируйте виртуальную среду:
python -m venv myenv
source myenv/bin/activate  # On Windows, use myenv\Scripts\activate
  • Установите Django и Django REST Framework:
pip install django djangorestframework

Создайте проект и приложение Django

  • Создайте новый проект Django:
django-admin startproject myproject
cd myproject
  • Создайте новое приложение Django:
python manage.py startapp myapp
  • Добавьте приложение в свой файл settings.py:
# myproject/settings.py

INSTALLED_APPS = [
    ...
    'myapp',
    'rest_framework',
]

Установите Celery и Redis

  • Установите Celery и Redis:
pip install celery redis
  • Настройте Celery в своем проекте, создав файл celery.py:
# myproject/celery.py
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')

app = Celery('myproject')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

app.conf.beat_schedule = {
    'run-this-task-every-day': {
        'task': 'myapp.tasks.my_scheduled_task',
        'schedule': crontab(minute="00", hour="7"),  # Executes every day at 7 AM
    },
}

app.conf.timezone = 'UTC'
  • Измените init.py, чтобы загрузить Celery с помощью Django:
# myproject/__init__.py
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ('celery_app',)
  • Настройте Celery в settings.py:
CELERY_BROKER_URL = os.environ.get('REDIS_URL')
CELERY_RESULT_BACKEND = os.environ.get('REDIS_URL')
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'UTC'
CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP = True

Создайте задачу «Сельдерей»

В вашем приложении Django определите задачу в Tasks.py:

# myapp/tasks.py
from celery import shared_task

@shared_task
def my_scheduled_task():
    print("This task runs every every day.")

Создать конфигурацию Docker

  • Создайте Dockerfile для вашего Django для API (с именем: Dockerfile.myapi):
FROM python:3.8-alpine3.15

ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1

WORKDIR /app

COPY requirements.txt /app

RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 9000

CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:8000", "myproject.wsgi:application"]
  • Создайте Dockerfile для сельдерея (с именем: Dockerfile.myjob)
FROM python:3.8-alpine3.15

ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1

WORKDIR /app
COPY requirements.txt /app
RUN pip install --no-cache-dir -r requirements.txt
COPY . /app

CMD ["celery", "-A", "myproject", "worker", "--loglevel=info", "--concurrency=4", "-E", "-B"]
  • Создайте файл require.txt для перечисления ваших зависимостей:
Django==4.2
djangorestframework==3.14.0
celery==5.3.1
redis==5.0.0
  • Создайте файл docker-compose.yml для управления сервисами:
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile.myapi
    container_name: myapp_api
    ports:
      - 7000:7000
    env_file:
      - .env

  celery:
    build:
      context: .
      dockerfile: Dockerfile.myjob
    container_name: myapp_job
    depends_on:
      - app
    env_file:
      - .env
  • Создайте файл .env и добавьте в него значение URL-адреса Redis:
REDIS_URL=

Сборка и запуск Docker-контейнеров

  • Создайте и запустите образы Docker:
docker-compose up --build

Это запустит ваше приложение Django вместе с рабочим Celery и планировщиком битов Celery.

Проверьте задание Cron

Теперь ваши задачи Celery должны выполняться в соответствии с заданным вами расписанием. Вы можете проверить журналы в указанное время, чтобы убедиться, что задача выполняется.

Заключение

Запуск заданий cron в Django с использованием Celery, Docker и Redis предлагает надежное и масштабируемое решение для управления фоновыми задачами. Docker гарантирует, что ваше приложение будет работать согласованно в различных средах, что упрощает развертывание. Следуя приведенным выше инструкциям, вы сможете эффективно автоматизировать задачи и с легкостью управлять своим проектом Django.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/engrmark/running-a-cron-job-in-django-using-celery-and-docker-238d?1. Если есть какие-либо нарушения, свяжитесь с Study_golang@163. .com, чтобы удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3