Planung asynchroner Multithreaded-Aufgaben in Django mit Celery

Django
|
Planung asynchroner Multithreaded-Aufgaben in Django mit Celery


Die Verwaltung von Aufgaben in einer Webanwendung kann komplex werden, insbesondere wenn Sie zeitaufwändige Vorgänge asynchron ausführen müssen. Django, ein beliebtes Webframework, kann mit Celery erweitert werden, um asynchrone Aufgaben effizient zu verarbeiten. In diesem Blogbeitrag werden wir untersuchen, wie Sie mit Celery eine periodische Aufgabenplanung in einer Django-Anwendung einrichten. Dadurch kann Ihre Anwendung Hintergrundaufgaben in festgelegten Intervallen ausführen und die Hauptanwendungsthreads von der Aufgabenverarbeitung entlasten.

1. Installieren Sie Celery und Django Celery Beat

Die Reise beginnt mit der Installation von Celery und django-celery-beat. Dies sind wesentliche Komponenten für die Aufgabenplanung und -ausführung in Django. Sie können sie mit pip installieren:

    pip install celery django-celery-beat
2. Celery konfigurieren

Nach der Installation von Celery müssen Sie es so konfigurieren, dass es mit Ihrer Django-Anwendung funktioniert. Erstellen Sie zunächst eine Datei mit dem Namen celery.py im Hauptverzeichnis Ihres Projekts. Diese Datei initialisiert Celery und verknüpft es mit den Einstellungen von Django.

    from celery import Celery
    import os

    # Set the default Django settings module for the 'celery' program.
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project_name.settings')

    app = Celery('your_project_name')

    # Using a string here means the worker will not have to serialize
    # the configuration object to child processes.
    app.config_from_object('django.conf:settings', namespace='CELERY')

    # Load task modules from all registered Django apps.
    app.autodiscover_tasks()

Um sicherzustellen, dass diese Konfiguration beim Start von Django geladen wird, importieren Sie Ihre Celery-App in your_project_name/__init__.py Datei:

    from .celery import app as celery_app

    __all__ = ('celery_app',)
3. Django-Einstellungen aktualisieren

Als nächstes integrieren Sie Celery in Ihre Django-Einstellungen, indem Sie die settings.py Datei. Dazu gehört die Angabe Ihres Brokers und des Ergebnis-Backends, das RabbitMQ oder Redis sein könnte.

    CELERY_BROKER_URL = 'redis://localhost:6379/0'  # or 'amqp://localhost//' for RabbitMQ
    CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
    CELERY_TIMEZONE = 'UTC'

    from celery.schedules import crontab

    CELERY_BEAT_SCHEDULE = {
        'task-name': {
            'task': 'myapp.tasks.task_function',
            'schedule': crontab(minute=0, hour=0),  # Executes daily at midnight
        },
    }
4. Definieren Sie Ihre Aufgabe

Jetzt ist es an der Zeit, Ihre Aufgaben zu definieren. Erstellen Sie ein tasks.py Datei in Ihrer Django-App (z. B. myapp ) und fügen Sie Ihre Aufgabenfunktion hinzu.

    from celery import shared_task

    @shared_task
    def task_function():
        # Logic for your asynchronous, multithreaded task
        print("Task is executing")

Hier, @geteilte_Aufgabe ist ein von Celery bereitgestellter Dekorator, der die Funktion als aufrufbare Aufgabe kennzeichnet.

5. Celery Worker und Beat ausführen

Schließlich müssen Sie den Celery-Worker und Beat ausführen, um mit der Verarbeitung der Aufgaben zu beginnen und sie entsprechend Ihrer Konfiguration zu planen.

    # Start Celery Worker
    celery -A your_project_name worker -l info

    # Start Celery Beat
    celery -A your_project_name beat -l info

Diese Befehle starten den Worker zur Verarbeitung asynchroner Aufgaben und den Beat-Prozess zur Verwaltung periodischer Aufgaben. Stellen Sie sicher, dass Ihr Message Broker wie Redis oder RabbitMQ ausgeführt wird, bevor Sie diese Befehle ausführen.

Indem Sie diese Schritte befolgen, können Sie Ihre Django-Anwendung so ausstatten, dass sie periodische asynchrone Aufgaben effizient verarbeiten kann, wodurch die Leistung und Reaktionsfähigkeit Ihrer Anwendung verbessert wird. Celery ist ein leistungsstarkes Tool, und mit diesem Setup sind Sie bereit, komplexere Ideen zur Aufgabenverarbeitung zu erkunden.




Wiederveröffentlichung Haftungsausschluss: Dieser Inhalt ist urheberrechtlich geschützt und alle Rechte liegen beim Autor. Sie sind eingeladen, diese Seite erneut zu veröffentlichen oder zu teilen, aber bitte stellen Sie sicher, dass Sie eine klare Quellenangabe geben, die mit einem Hyperlink zurück zu dieser Seite führt. Danke, dass Sie unseren Inhalt respektieren!

War dieser Artikel hilfreich?
196 von 196 fanden dies hilfreich
avatar
John Tanner
Gründer

Ich bin ein hochqualifizierter Softwareentwickler mit über 20 Jahren Erfahrung in plattformübergreifender Full-Stack-Entwicklung. Ich bin spezialisiert auf das Entwerfen und Verwalten von großangelegten Projektarchitekturen und das Vereinfachen komplexer Systeme. Meine Expertise umfasst Python-, Rust- und Django-Entwicklung. Ich habe umfassende Kenntnisse in Blockchain-Technologien, künstlicher Intelligenz, hochkonkurrierenden Systemen, App- und Web-Datenextraktion, API-Entwicklung, Datenbankoptimierung, Containerisierung von Projekten und dem Einsatz in Produktionsumgebungen.

Kontakt John Tanner