Pianificazione di Attività Asincrone Multithread in Django con Celery

Django
|
Pianificazione di Attività Asincrone Multithread in Django con Celery


La gestione delle attività in un'applicazione Web può diventare complessa, soprattutto quando è necessario eseguire operazioni che richiedono molto tempo in modo asincrono. Django, un framework Web popolare, può essere esteso con Celery per gestire in modo efficiente le attività asincrone. In questo post del blog, esploreremo come impostare la pianificazione periodica delle attività con Celery in un'applicazione Django. Ciò consente all'applicazione di eseguire attività in background a intervalli specificati e di scaricare l'elaborazione delle attività dai thread dell'applicazione principale.

1. Installa Celery e Django Celery Beat

Il viaggio inizia con l'installazione di Celery e django-celery-beat. Questi sono componenti essenziali per la pianificazione e l'esecuzione delle attività in Django. Puoi installarli usando pip:

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

Dopo aver installato Celery, devi configurarlo per funzionare con la tua applicazione Django. Inizia creando un file denominato celery.py nella directory principale del tuo progetto. Questo file inizializzerà Celery e lo collegherà alle impostazioni di 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()

Per assicurarti che questa configurazione venga caricata all'avvio di Django, importa la tua app Celery in your_project_name/__init__.py file:

    from .celery import app as celery_app

    __all__ = ('celery_app',)
3. Aggiorna le impostazioni di Django

Successivamente, integra Celery con le impostazioni di Django aggiornando settings.py file. Ciò include la specificazione del broker e del backend dei risultati, che potrebbe essere RabbitMQ o Redis.

    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. Definisci il tuo compito

Ora è il momento di definire quali dovrebbero essere i tuoi compiti. Crea un tasks.py file nella tua app Django (ad esempio, myapp ) e aggiungi la funzione della tua attività.

    from celery import shared_task

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

Qui, @compito_condiviso è un decoratore fornito da Celery che contrassegna la funzione come un'attività richiamabile.

5. Esegui Celery Worker e Beat

Infine, è necessario eseguire il worker Celery e beat per iniziare a elaborare le attività e pianificarle in base alla configurazione.

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

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

Questi comandi avviano il worker per elaborare task asincroni e il beat process per gestire task periodici. Assicurati che il tuo message broker come Redis o RabbitMQ sia in esecuzione prima di eseguire questi comandi.

Seguendo questi passaggi, hai equipaggiato la tua applicazione Django per gestire in modo efficiente task asincroni periodici, migliorando le prestazioni e la reattività della tua applicazione. Celery è uno strumento potente e con questa configurazione, sei pronto per esplorare idee di elaborazione di task più complesse.




Clausola di Esclusione di Responsabilità per la Ripubblicazione: Questo contenuto è protetto da copyright e tutti i diritti sono riservati dall'autore. Siete invitati a ripostare o condividere questa pagina, ma assicuratevi di fornire un chiaro riconoscimento alla fonte originale con un hyperlink che rimanda a questa pagina. Grazie per rispettare il nostro contenuto!

Questo articolo è stato utile?
196 su 196 hanno trovato questo utile
avatar
John Tanner
Fondatore

Sono uno sviluppatore software altamente qualificato con oltre 20 anni di esperienza nello sviluppo full-stack multipiattaforma. Mi specializzo nella progettazione e gestione di architetture di progetti su larga scala e nella semplificazione di sistemi complessi. La mia esperienza si estende allo sviluppo in Python, Rust e Django. Ho una profonda competenza nelle tecnologie blockchain, intelligenza artificiale, sistemi ad alta concorrenza, scraping di dati di app e web, sviluppo di API, ottimizzazione di database, containerizzazione di progetti e deployment in ambienti di produzione.

Contatto John Tanner