En la entrega anterior, aprendimos sobre Django-Celery-Beat: Cómo crear tareas programadas, mediante el cual exploramos la forma básica de crear tareas programadas en Django-Celery-Beat.
📌 ¡Haz clic en el título para revisar la publicación anterior!
Sin embargo, en proyectos reales, a menudo no es suficiente simplemente ejecutar repetidamente en un horario programado.
- Puede que sea necesario limitar la ejecución a horarios específicos,
- cambiar dinámicamente el ciclo de ejecución,
- desactivar la tarea bajo ciertas condiciones,
- o configurar que automáticamente se desactive después de una fecha específica.
Para abordar esta lógica compleja, en esta entrega profundizaremos en el modelo PeriodicTask de Django-Celery-Beat, explorando diversos campos y métodos de configuración. 🚀
1️⃣ Configuración de PeriodicTask utilizando update_or_create
En servicios reales, es más común modificar las tareas programadas en respuesta a solicitudes de usuarios y cambios en el entorno, en lugar de simplemente dejarlas tal como se crearon.
Por lo tanto, es más útil utilizar update_or_create()
en lugar de PeriodicTask.objects.create()
.
📌 Al utilizar update_or_create()
,
- se actualiza si la tarea ya existe
- se crea una nueva si no existe
Es decir, se permite sustituir tareas programadas con el mismo nombre, evitando instancias duplicadas innecesarias.
2️⃣ Campo PeriodicTask.interval y modelo IntervalSchedule
En Django-Celery-Beat, PeriodicTask
permite configurar el intervalo de repetición a través del campo interval
.
Este campo interval
está asociado con el modelo IntervalSchedule
, por lo que primero se debe crear una instancia de IntervalSchedule
para luego referenciarla en PeriodicTask
.
Así que, para registrar una tarea programada:
- Primero se crea una instancia de
IntervalSchedule
- Luego se conecta la
IntervalSchedule
recién creada aPeriodicTask
3️⃣ Opciones de campo de IntervalSchedule
Nombre del campo | Descripción | Ejemplo de valor |
---|---|---|
every |
Valor numérico del período de repetición | 10 , 30 , 2 |
period |
Unidad del período de repetición | IntervalSchedule.SECONDS , IntervalSchedule.MINUTES , IntervalSchedule.HOURS , IntervalSchedule.DAYS |
4️⃣ Ejemplo de configuración de PeriodicTask utilizando update_or_create
from django_celery_beat.models import PeriodicTask, IntervalSchedule
import json
# Crear IntervalSchedule (ejecución cada 10 minutos)
schedule, created = IntervalSchedule.objects.get_or_create(
every=10,
period=IntervalSchedule.MINUTES
)
# Crear o actualizar PeriodicTask
task, created = PeriodicTask.objects.update_or_create(
name="send_reminder_email",
defaults={
"interval": schedule,
"task": "myapp.tasks.send_reminder_email",
"args": json.dumps([1]),
"enabled": True,
}
)
5️⃣ Otras descripciones de campos del PeriodicTask
Nombre del campo | Descripción | Ejemplo |
---|---|---|
name |
Nombre único de la tarea | "send_report_task" |
interval |
Intervalo de ejecución (Referencia IntervalSchedule ) |
schedule |
crontab |
Para ejecutar a horarios específicos (Referencia CrontabSchedule ) |
None |
clocked |
Ejecutar solo una vez a una hora específica (Referencia ClockedSchedule ) |
None |
task |
Tarea de Celery a ejecutar | "myapp.tasks.send_report" |
args |
Argumentos a pasar a la función (formato JSON) | json.dumps([123, "email@example.com"]) |
kwargs |
Argumentos de palabra clave para la función (formato JSON) | json.dumps({"priority": "high"}) |
enabled |
Estado de ejecución | True o False |
one_off |
Ejecutar solo una vez y finalizar | True o False |
📌 Si se establece one_off=True
, la tarea se desactivará después de ejecutarse una vez, pero no se eliminará.
📌 Utilizando el campo clocked
se puede programar una tarea que se ejecute una vez a una hora específica precisa.
🎯 Conclusión: ¡Utiliza update_or_create
para gestionar tareas programadas con flexibilidad!
📌 Al registrar tareas programadas en Django-Celery-Beat, utilizar update_or_create()
permite modificar fácilmente tareas existentes.
📌 El campo PeriodicTask.interval
se refiere a IntervalSchedule
, así que primero se debe crear la instancia de IntervalSchedule
y luego conectarse a ella.
📌 Para gestionar tareas programadas complejas, utilizar campos como args
, kwargs
, enabled
, one_off
, clocked
puede facilitar la configuración.
🔥 Avance del próximo capítulo
En esta entrega, aprendimos sobre cómo crear y modificar PeriodicTask de manera más flexible.
En la próxima entrega, trataremos la configuración de tareas programadas utilizando Crontab para ejecuciones en momentos específicos, así como el uso de Clocked para ejecutar tareas solo una vez a una hora específica.
¡Esperamos que estés ansioso por conocer más sobre el uso de Celery en el próximo episodio! 🚀
Y si deseas ver más artículos relacionados con Celery en el blog,
¡consulta la lista de 'Publicaciones similares' a continuación o busca "Celery" en la barra de búsqueda en la parte superior derecha! 😊
Add a New Comment