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.

¿Puedes obtener el id de una tarea celery a partir de una firma?

Tengo que implementar una comprobación para verificar si mis tareas de celery ya han sido creadas, por eso estoy intentando inspeccionar las colas de rabbitmq y buscar los ids de las tareas cada vez que llamo a .delay() o apply_async(). El problema es que hay muchas firmas pasándose en mi código y no sé cómo obtener el id de una tarea a partir de una firma. Según la documentación, el objeto de la firma tiene este aspecto:

{'task': 'tasks.add', args=(2, 2), kwargs={}, options={}}

(https://docs.celeryproject.org/en/stable/reference/celery.html)

Pero aquí la tarea es solo una cadena y no estoy seguro si ya se le ha asignado el id. Esto es lo que me gustaría hacer en mi código:

some_task_signature = task.s(parámetros)
task_id = some_task_signature.task_id # No estoy seguro si esto está realmente en la firma
if not is_task_active_or_registered(app, task_id):
    some_task_signature.delay()

Estoy usando la versión 3.1.25 de celery y python 3.6 desplegado en una máquina virtual Windows 10.

Agradecería mucho cualquier ayuda.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener el ID de tarea de un objeto de firma de Celery, puedes utilizar la propiedad id de la firma. Aquí tienes cómo puedes modificar tu código para comprobar si la tarea ya ha sido creada:

    some_task_signature = task.s(parameters)
    task_id = some_task_signature.id
    if not is_task_active_or_registered(app, task_id):
        some_task_signature.delay()
    

    Ten en cuenta que task_id puede ser None si la tarea aún no ha sido creada. Para asegurarte de que la tarea tenga un ID, puedes llamar a some_task_signature.apply_async() en lugar de some_task_signature.delay(). Esto creará la tarea y asignará un ID si es necesario antes de devolver la tarea.

Comments are closed.