J'ai donc une tâche qui crée un répertoire de travail et y fait tout son travail. La tâche est appelée depuis serveur A et exécutée sur serveurs de travail.Identifiant de la tâche céleri dans le gestionnaire task_revoked
Je dois m'assurer que le répertoire de travail est supprimé une fois la tâche terminée/annulée.
J'ai ajouté un gestionnaire révoqué de tâche et il ressemble à ceci:
@task
def my_task(value):
task_id = current_task.request.id
work_dir = os.path.join(BASE_WORK_DIR, task_id)
os.makedirs(work_dir)
try:
# Do work...
finally:
shutil.rmtree(work_dir)
@task_revoked.connect(sender=my_task)
def my_task_revoked_handler(*args, **kwargs):
# FIXME: delete work_dir
print args
#()
print kwargs
# {'terminated': True, 'signal': <Signal: Signal>, 'expired': False, 'sender': <@task: myapp.core.tasks.my_task>, 'signum': '15'}
Mon problème est quand serveur A annule la tâche que je ne peux pas donner un nettoyage du répertoire de travail dans le gestionnaire révoqué car il doesn N'ayez pas le task_id.
Est-il possible d'obtenir l'ID de tâche à partir de ce gestionnaire de signaux spécifique? Certains other Signals les ont, et j'ai regardé la source à l'endroit où ils sont émis et pour une raison quelconque, ce signal n'est pas fourni avec le task_id.
La tâche sender
fournie contient une fonction de trace_task: {'__trace__': <function trace_task at 0x3ee8230>}
mais je ne vois pas comment je pourrais l'utiliser car la fonction elle-même nécessite un ID de tâche.
Toutes les autres idées sont les bienvenues.
La fin est meilleure que jamais je suppose =) – JayLev