2013-03-26 3 views
1

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.

Répondre

1

Je pense que ce qui se passe ici, c'est que vous utilisez une ancienne version de céleri qui ne supporte pas ce premier argument "request".

Le problème en amont qui a été ajouté était [1]; Avant cela, je pense que vous n'avez pas de chance et il n'y a malheureusement aucun moyen d'obtenir le task_id.

[1] https://github.com/celery/celery/issues/1555

+0

La fin est meilleure que jamais je suppose =) – JayLev

Questions connexes