simple run results beat app python django celery

python - run - django-celery-results



Apio-Obtener ID de tarea para la tarea actual (3)

A partir del apio 3.1, puede utilizar el argumento del decorador de vinculación y tener acceso a la solicitud actual:

@task(bind=True) def do_job(self, path): cache.set(self.request.id, operation_results)

¿Cómo puedo obtener el valor task_id para una tarea desde dentro de la tarea? Aquí está mi código:

from celery.decorators import task from django.core.cache import cache @task def do_job(path): "Performs an operation on a file" # ... Code to perform the operation ... cache.set(current_task_id, operation_results)

La idea es que cuando creo una nueva instancia de la tarea, recupero el task_id de tarea del objeto de tarea. Luego utilizo el ID de tarea para determinar si la tarea se ha completado. No quiero hacer un seguimiento de la tarea por el valor de la path porque el archivo se "limpia" una vez que la tarea se completa y puede o no existir.

En el ejemplo anterior, ¿cómo obtendré el valor de current_task_id ?


Apio establece algunos argumentos de palabras clave predeterminadas si la tarea los acepta. (Puedes aceptarlos usando ** kwargs, o enumerarlos específicamente)

@task def do_job(path, task_id=None): cache.set(task_id, operation_results)

La lista de argumentos de palabras clave predeterminadas se documenta aquí: http://ask.github.com/celery/userguide/tasks.html#default-keyword-arguments


Desde Celery 2.2.0, la información relacionada con la tarea actualmente ejecutada se guarda en task.request (se llama «el contexto»). Por lo tanto, debe obtener la ID de tarea de este contexto (no de los argumentos de palabras clave, que están en desuso):

@task def do_job(path): cache.set(do_job.request.id, operation_results)

La lista de todos los campos disponibles se documenta aquí: http://celery.readthedocs.org/en/latest/userguide/tasks.html?highlight=requestcontext#context