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