Programación de tareas asincrónicas con múltiples hilos en Django con Celery

Django
|
Programación de tareas asincrónicas con múltiples hilos en Django con Celery


La gestión de tareas en una aplicación web puede volverse compleja, especialmente cuando se necesitan realizar operaciones que consumen mucho tiempo de forma asincrónica. Django, un popular framework web, se puede ampliar con Celery para gestionar tareas asincrónicas de forma eficiente. En esta publicación del blog, exploraremos cómo configurar la programación periódica de tareas con Celery en una aplicación Django. Esto permite que su aplicación ejecute tareas en segundo plano a intervalos específicos y descargue el procesamiento de tareas de los subprocesos principales de la aplicación.

1. Instalar Celery y Django Celery Beat

El proceso comienza con la instalación de Celery y django-celery-beat. Estos son componentes esenciales para la programación y ejecución de tareas en Django. Puedes instalarlos usando pip:

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

Después de instalar Celery, debes configurarlo para que funcione con tu aplicación Django. Comienza creando un archivo llamado celery.py en el directorio principal de tu proyecto. Este archivo inicializará Celery y lo vinculará a la configuración de 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()

Para garantizar que esta configuración se cargue cuando se inicie Django, importe su aplicación Celery en el your_project_name/__init__.py archivo:

    from .celery import app as celery_app

    __all__ = ('celery_app',)
3. Actualizar la configuración de Django

A continuación, integre Celery con su configuración de Django actualizando el settings.py archivo. Esto incluye especificar su agente y el backend de resultados, que podría ser 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. Define tu tarea

Ahora es el momento de definir cuáles deben ser tus tareas. Crea una tasks.py archivo en su aplicación Django (por ejemplo, myapp ) y agregue su función de tarea.

    from celery import shared_task

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

Aquí, @tarea_compartida es un decorador proporcionado por Celery que marca la función para que sea una tarea invocable.

5. Ejecuta Celery Worker y vence

Por último, debes ejecutar el trabajador Celery y Beat para comenzar a procesar las tareas y programarlas de acuerdo con tu configuración.

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

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

Estos comandos lanzan el trabajador para procesar tareas asincrónicas y el proceso de control para administrar tareas periódicas. Asegúrese de que su agente de mensajes, como Redis o RabbitMQ, esté en ejecución antes de ejecutar estos comandos.

Si sigue estos pasos, equipará su aplicación Django para que gestione de manera eficiente tareas asincrónicas periódicas, lo que mejorará el rendimiento y la capacidad de respuesta de su aplicación. Celery es una herramienta poderosa y, con esta configuración, estará listo para explorar ideas de procesamiento de tareas más complejas.




Aviso de Repost: Este contenido está protegido por derechos de autor y todos los derechos están reservados por el autor. Le invitamos a republicar o compartir esta página, pero asegúrese de proporcionar un crédito claro a la fuente original con un hipervínculo de regreso a esta página. ¡Gracias por respetar nuestro contenido!

¿Fue útil este artículo?
196 de 196 personas encontraron esto útil
avatar
John Tanner
Fundador

Soy un desarrollador de software altamente capacitado con más de 20 años de experiencia en desarrollo full-stack multiplataforma. Me especializo en diseñar y gestionar arquitecturas de proyectos a gran escala y simplificar sistemas complejos. Mi experiencia se extiende al desarrollo en Python, Rust y Django. Tengo una profunda competencia en tecnologías blockchain, inteligencia artificial, sistemas de alta concurrencia, scraping de datos de aplicaciones y web, desarrollo de APIs, optimización de bases de datos, containerización de proyectos y despliegue en entornos de producción.

Contacto John Tanner