Al desarrollar aplicaciones web, a menudo se necesitan realizar tareas que requieren mucho tiempo. Por ejemplo:

  • Cuando un usuario se registra, se debe enviar un correo electrónico de verificación.
  • A las 12 de la noche todos los días, se debe ejecutar automáticamente una tarea de limpieza de datos.
  • Cuando un usuario programa una tarea, debe ejecutarse en el momento programado.

Django, por defecto, funciona como un sistema que responde inmediatamente cuando recibe una solicitud, por lo que se necesita una forma de procesar tareas que tardan mucho tiempo de manera asíncrona. ¡Aquí es donde entra Celery! 🚀

Celery es una herramienta poderosa que ayuda a ejecutar tareas asíncronas en Django, y Celery-Beat te ayuda a ejecutar tareas específicas en el tiempo programado.

Django Celery-Beat task scheduling illustration

1️⃣ Cómo configurar tareas programadas en Django-Celery-Beat

Hay dos formas principales de configurar tareas programadas en Celery-Beat.

✅ (1) Configuración a través de la GUI en Django Admin

Django-Celery-Beat permite configurar tareas programadas directamente a través de la GUI en Django Admin.

📌 Características
  • Es posible ejecutar tareas periódicas con una simple configuración sin necesidad de codificación.
  • Se pueden configurar y modificar tareas periódicas a través de la UI en la página de administración de Django.
  • Sin embargo, dado que son configuraciones estáticas, es dificultoso cambiarlas dinámicamente en relación con las solicitudes de los usuarios.
📌 ¿Cuándo es útil?
  • Cuando no se necesita interacción entre la aplicación y el usuario
  • Ejemplo) Tareas que se ejecutan automáticamente para realizar copias de seguridad de datos a medianoche
  • Ejemplo) Tareas que actualizan datos de APIs específicas cada lunes por la mañana

✅ (2) Crear tareas programadas dinámicamente a través de código Python

También se pueden crear tareas programadas en Celery-Beat a través de código directamente.

📌 Características
  • Es posible crear tareas programadas dinámicamente según las solicitudes del usuario.
  • Las tareas programadas se pueden crear, modificar y eliminar a través de código.
  • Sin pasar por Admin, se pueden registrar tareas periódicas directamente desde las vistas.
📌 ¿Cuándo es útil?
  • Cuando sea necesario tener tareas programadas al surgir una solicitud específica del usuario.
  • Ejemplo) Cuando un usuario realiza un "pedido programado", se registra una tarea que se cancela automáticamente 2 horas después.
  • Ejemplo) Cuando un usuario configura una "notificación por correo electrónico", se programa para enviar un correo de recordatorio en el momento especificado.

2️⃣ [Práctica] Crear tareas programadas con código Python

Paso 1: Definir la tarea de Celery

from celery import shared_task

@shared_task
def send_reminder_email(user_id):
    # Implementar la lógica para enviar el correo electrónico aquí
    print(f"📧 Se ha enviado un correo de recordatorio al usuario {user_id}!")

Paso 2: Crear un objeto PeriodicTask en Django-Celery-Beat

from django_celery_beat.models import PeriodicTask, IntervalSchedule
import json

# 1️⃣ Crear un intervalo de ejecución (por ejemplo, cada 10 minutos)
schedule, created = IntervalSchedule.objects.get_or_create(
    every=10,  # cada 10 minutos
    period=IntervalSchedule.MINUTES
)

# 2️⃣ Crear una PeriodicTask
task = PeriodicTask.objects.create(
    interval=schedule,  # intervalo de ejecución
    name="Enviar correo de recordatorio",  # nombre de la tarea
    task="myapp.tasks.send_reminder_email",  # nombre de la tarea de Celery
    args=json.dumps([1]),  # pasar el ID del usuario (en este ejemplo, el usuario 1)
)

🎯 Conclusión: ¡Celery es indispensable para los desarrolladores de Django!

Celery es una herramienta esencial que permite gestionar y programar tareas asíncronas en Django.

En particular, utilizando Celery-Beat, puedes establecer tareas periódicas y gestionar la programación dinámicamente según eventos específicos.

📌 Para resumir:

  1. Django-Celery-Beat es una herramienta poderosa para ejecutar tareas programadas.
  2. Usando Django Admin (GUI) es fácil configurar tareas periódicas.
  3. Si se crean tareas a través del código de Python, se pueden gestionar dinámicamente las tareas programadas según las solicitudes del usuario.
  4. Para los desarrolladores de Django, es esencial entender los conceptos básicos de Celery y Celery-Beat.

🔥 Adelanto del próximo artículo

En este artículo, hemos presentado de manera sencilla cómo crear tareas programadas de Celery-Beat a través del código, pero en la práctica se utilizarán más campos del modelo `PeriodicTask` para abordar lógicas más complejas.

En el próximo artículo, detallaremos código práctico para programar diversas tareas y el papel de cada campo del modelo `PeriodicTask`.

¡Sigue atento para aprender más sobre el uso profundo de Celery en el próximo artículo! 🚀

Y si deseas ver más artículos relacionados con Celery en el blog,

¡busca en la lista de 'artículos similares' a continuación o busca "Celery" en la barra de búsqueda en la parte superior derecha! 😊