es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Celery beat no retoma las tareas programadas en Django.

He usado Celery y Django Celery Beat para ejecutar una tarea programada predefinida. Cuando ejecuto primero el trabajador de Celery y luego el trabajador de Celery Beat, todo funciona bien, la tarea se añade a la base de datos y también se envía continuamente a la cola por el trabajador de Celery Beat.

Pero cuando detengo el trabajador de Beat y lo inicio de nuevo, ya no funciona, aunque la tarea esté definida en la base de datos.

¿Qué debería hacer?

Este es mi código para Django:

<h1>Establece el módulo de configuración predeterminado de Django para el programa 'celery'.</h1>

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')

<h1>Usar una cadena aquí significa que el trabajador no tiene que serializar</h1>

<h1>el objeto de configuración a los procesos secundarios.</h1>

<h1>- namespace='CELERY' significa que todas las claves de configuración relacionadas con Celery</h1>

<h1>deben tener un prefijo 'CELERY_'.</h1>

app.config.from_object('django.conf:settings', namespace='CELERY')

<h1>Cargar los módulos de tarea de todas las aplicaciones registradas de Django.</h1>

app.autodiscover_tasks()

@app.task
def test(arg):
    print(arg)

@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
    # Llama a test('hello') cada 10 segundos.
    sender.add_periodic_task(10.0, test.s('hello'), name='decir hola cada 10 segundos')

app.conf.beat_schedule = {
    'ejecutar-cada-12-segundos': {
        'task': 'tasks.test',
        'schedule': 12.0,
        # 'args': ()
    },
}

Y así es como inicio el trabajador de Celery y el trabajador de Celery Beat:

celery -A proj worker -l info
celery -A proj beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler

Agradecería una ayuda…

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Si la tarea está definida en la base de datos pero no se está ejecutando después de reiniciar Celery beat, hay algunas posibles causas que puedes verificar:

    1. Asegúrate de que el proceso que está ejecutando Celery beat sea el mismo que se utilizó para agregar la tarea a la base de datos. Si estás ejecutando múltiples instancias de Celery beat o utilizando un balanceador de carga, es posible que la tarea no sea visible para el proceso recién iniciado.
    2. Verifica los registros de Celery para ver si hay algún problema con los procesos del trabajador o de beat. Puedes aumentar el nivel de registro a “debug” para obtener más información.

    3. Asegúrate de que el horario siga activo y no haya expirado. Si la tarea estaba programada para ejecutarse en un momento o intervalo específico, es posible que no sea visible para Celery beat si el horario ya ha pasado.

    4. Intenta utilizar un intermediario persistente como Redis para almacenar la cola de tareas. Esto puede ayudar a asegurar que las tareas no se pierdan al detener y reiniciar Celery beat.

    5. Utiliza un planificador diferente como UTC, Beat o Crontab que acepte problemas de zona horaria.

    Al verificar estos aspectos, deberías poder identificar y resolver el problema de Celery beat que no ejecuta la tarea después de reiniciar.

Comments are closed.