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
John Tanner
FundadorSoy 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 TannerPublicación relacionada:
- Servicios de Desarrollo Django
- Desvelando el Poder de Django: El Marco Backend Definitivo
- Creación de un sitio web multilingüe con Django: mejores prácticas y estrategias de SEO
- Cómo construir un sitio web independiente exitoso para el comercio exterior: Una guía completa desde la investigación de mercado hasta la optimización SEO
- Construyendo aplicaciones impulsadas por IA con Django