Heim > Backend-Entwicklung > Python-Tutorial > Ausführen eines Cron-Jobs in Django mit Celery und Docker

Ausführen eines Cron-Jobs in Django mit Celery und Docker

WBOY
Freigeben: 2024-08-31 06:01:37
Original
451 Leute haben es durchsucht

Running a Cron Job in Django Using Celery and Docker

Einführung in Cron-Jobs

Ein Cron-Job ist eine geplante Aufgabe, die automatisch in bestimmten Intervallen ausgeführt wird. Diese Aufgaben sind nützlich, um sich wiederholende Vorgänge wie das Versenden von Erinnerungs-E-Mails, das Erstellen von Berichten oder das Bereinigen von Datenbanken zu automatisieren. In einem Django-Projekt können Cron-Jobs mit Tools wie Celery eingerichtet werden, was die Planung und Verwaltung von Aufgaben einfach und effizient macht.

Einrichten Ihres Django-Projekts

Beginnen wir mit der Erstellung eines Django-Projekts, der Installation der erforderlichen Pakete und der anschließenden Containerisierung des Projekts mit Docker.

Erstellen Sie eine virtuelle Umgebung und installieren Sie Django und DRF

  • Öffnen Sie Ihr Terminal und navigieren Sie zu Ihrem Projektverzeichnis.
  • Erstellen und aktivieren Sie eine virtuelle Umgebung:
python -m venv myenv
source myenv/bin/activate  # On Windows, use myenv\Scripts\activate
Nach dem Login kopieren
  • Installieren Sie Django und Django REST Framework:
pip install django djangorestframework
Nach dem Login kopieren

Erstellen Sie ein Django-Projekt und eine Django-App

  • Erstellen Sie ein neues Django-Projekt:
django-admin startproject myproject
cd myproject
Nach dem Login kopieren
  • Erstellen Sie eine neue Django-App:
python manage.py startapp myapp
Nach dem Login kopieren
  • Fügen Sie die App zu Ihren Settings.py hinzu:
# myproject/settings.py

INSTALLED_APPS = [
    ...
    'myapp',
    'rest_framework',
]
Nach dem Login kopieren

Installieren Sie Sellerie und Redis

  • Sellerie und Redis installieren:
pip install celery redis
Nach dem Login kopieren
  • Richten Sie Celery in Ihrem Projekt ein, indem Sie eine celery.py-Datei erstellen:
# 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'
Nach dem Login kopieren
  • Ändern Sie init.py, um Celery mit Django zu laden:
# myproject/__init__.py
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ('celery_app',)
Nach dem Login kopieren
  • Konfigurieren Sie Celery in 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
Nach dem Login kopieren

Erstellen Sie eine Sellerie-Aufgabe

Definieren Sie in Ihrer Django-App die Aufgabe in task.py:

# myapp/tasks.py
from celery import shared_task

@shared_task
def my_scheduled_task():
    print("This task runs every every day.")
Nach dem Login kopieren

Erstellen Sie eine Docker-Konfiguration

  • Erstellen Sie eine Docker-Datei für Ihr Django für die API (benannt: 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"]
Nach dem Login kopieren
  • Erstellen Sie eine Docker-Datei für den Sellerie (mit dem Namen: 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"]
Nach dem Login kopieren
  • Erstellen Sie eine „requirements.txt“-Datei, um Ihre Abhängigkeiten aufzulisten:
Django==4.2
djangorestframework==3.14.0
celery==5.3.1
redis==5.0.0
Nach dem Login kopieren
  • Erstellen Sie eine docker-compose.yml-Datei, um Dienste zu verwalten:
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
Nach dem Login kopieren
  • Erstellen Sie eine .env-Datei und fügen Sie den Redis-URL-Wert hinzu:
REDIS_URL=<your_redis_url>
Nach dem Login kopieren

Erstellen Sie die Docker-Container und führen Sie sie aus

  • Erstellen Sie die Docker-Images und führen Sie sie aus:
docker-compose up --build
Nach dem Login kopieren

Dadurch wird Ihre Django-Anwendung zusammen mit dem Celery-Worker und dem Celery-Beat-Scheduler gestartet.

Überprüfen Sie den Cron-Job

Ihre Celery-Aufgaben sollten jetzt gemäß dem von Ihnen definierten Zeitplan ausgeführt werden. Sie können die Protokolle zum angegebenen Zeitpunkt überprüfen, um zu bestätigen, dass die Aufgabe ausgeführt wird.

Abschluss

Das Ausführen von Cron-Jobs in Django mit Celery, Docker und Redis bietet eine robuste und skalierbare Lösung für die Verwaltung von Hintergrundaufgaben. Docker stellt sicher, dass Ihre Anwendung in verschiedenen Umgebungen konsistent ausgeführt wird, was die Bereitstellung erleichtert. Indem Sie die oben genannten Schritte ausführen, können Sie Aufgaben effizient automatisieren und Ihr Django-Projekt problemlos verwalten.

Das obige ist der detaillierte Inhalt vonAusführen eines Cron-Jobs in Django mit Celery und Docker. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage