Tareas periódicas con Celery

Clase 30 de 36Curso de Celery 4

Resumen

¿Cómo trabajar con tareas periódicas en Celery?

Aprender a programar tareas periódicas es una habilidad esencial para automatizar procesos que requieren una ejecución constante, como la recolección de datos o el mantenimiento del servidor. En este contenido, descubrirás cómo manejar tareas periódicas usando Celery, un potente gestor de tareas en Python que facilita programar y ejecutar trabajos en segundo plano.

¿Qué es Celery y cómo se usa?

Celery es una biblioteca de Python diseñada para gestionar las tareas de manera asíncrona y programada. Te permite definir tareas específicas y programar su ejecución en intervalos regulares, lo que es útil cuando necesitas procesos repetitivos sin intervención humana. Algunos aspectos clave de Celery incluyen:

  • Gestión de tareas asíncronas: Permite ejecutar procesos largos en segundo plano, mejorando el rendimiento de las aplicaciones.
  • Compatibilidad con diferentes brokers de mensaje: Puede ser usada con RabbitMQ, Redis, entre otros.
  • Programación de tareas periódicas: Proporciona un módulo llamado celery.beat, que permite configurar tareas para que se ejecuten automáticamente en un horario establecido.

¿Cómo configurar tareas periódicas en Celery?

Primero, debes importar las herramientas necesarias para trabajar con Celery. Aquí te mostramos cómo estructurar tu script para crear una tarea periódica:

from celery import Celery
from celery.schedules import crontab

app = Celery('nombre_aplicacion', broker='redis://localhost:6379/0')

# Configurar tarea periódica
app.conf.beat_schedule = {
    'nombre_tarea': {
        'task': 'nombre_modulo.tarea_especifica',
        'schedule': crontab(minute=0, hour='*/1'),  # Ejecutar cada hora
    },
}

¿Cómo extraer datos regularmente con Python?

Supongamos que necesitas recolectar datos desde una página web en intervalos regulares. Puedes usar bibliotecas como beautifulsoup4 para analizar el HTML y extraer la información que necesitas. Esto se complementa con Celery para programar la descarga de datos periódicos.

import requests
from bs4 import BeautifulSoup

def descargar_datos():
    url = "https://ejemplo.com/pagina-deseada"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # Extraer datos específicos de la página
    datos_extraidos = soup.find_all('div', class_='clase-especifica')
    
    with open('datos.json', 'w') as archivo:
        archivo.write(str(datos_extraidos))

¿Cómo ejecutar una tarea periódica de Celery?

Para iniciar las tareas, debes ejecutar Celery con un worker y, si estás programando tareas periódicas, también necesitas arrancar el beat scheduler.

  1. Iniciar el worker: Proceso que ejecuta las tareas programadas por Celery.

    celery -A nombre_aplicacion worker --loglevel=info
    
  2. Iniciar el beat scheduler: Se encarga de enviar las tareas periódicas al worker.

    celery -A nombre_aplicacion beat --loglevel=info
    

¿Consejos para trabajar con tareas periódicas en Celery?

  • Comenzar simple: Configure una tarea básica para asegurarse de que los componentes de Celery están correctamente instalados y trabajan juntos.
  • Registro y monitorización: Use los logs para entender qué está fallando en caso de errores, y monitorice las tareas para optimizar sus tiempos de ejecución.
  • Escalabilidad: Diseñe las tareas de manera modular para facilitar la escalabilidad y personalización.
  • Tareas atómicas: Haga que sus tareas sean pequeñas y realicen una sola función para reducir la complejidad y facilitar la depuración.

Celery es una herramienta poderosa que puede manejar múltiples tareas y programarlas eficientemente, ofreciendo una solución ideal para proyectos que requieran automatización y procesamiento en segundo plano. Con la práctica y un buen enfoque, podrás dominar el uso de tareas periódicas y mejorar la eficiencia de tus aplicaciones.