2015-12-07 1 views
2

Je cherche des solutions pour définir les options de planification de battements de céleri à une tâche pour inclure un rappel link_error.Battements de céleri ajouter la signature d'erreur de lien

Mon intention est d'enregistrer des exceptions dans mes tâches planifiées. Adding a link_error option semble être la voie à suivre. Cependant, je ne suis pas sûr de la façon dont je peux obtenir la signature de la tâche d'erreur dans mon fichier de paramètres.

Voici ma définition de gestionnaire erreur directement à partir de la documentation

@app.task(bind=True) 
def error_handler(self, uuid): 
    result = self.app.AsyncResult(uuid) 
    logger.error('Task {0} raised exception: {1!r}\n{2!r}'.format(
     uuid, result.result, result.traceback) 
    ) 

et mon erreur lancer la tâche

@app.task 
def failme():  
    raise Exception() 

Voici deux choses que je goûtés mon emploi du temps, mais cela ne fonctionne pas

'failme-every-10-se': { 
    'task': 'ep.tasks.failme', 
    'schedule': timedelta(seconds=5), 
    'options': {'link_error': 'ep.tasks.error_handler.s()'} 
}, 

et

import error_handler 

CELERYBEAT_SCHEDULE = {  
'error-task-every-5-minutes': { 
    'task': 'failme', 
    'schedule': timedelta(minutes=5),   
    'options': {'link_error': error_handler.s()} 
    }, 
} 

Merci

+0

Si vous utilisez Django, avez-vous essayé avec 'shared_task' au lieu de' app.task'? –

+0

En quoi cela changerait-il la signature de la définition de la tâche dans la configuration pour me rapprocher d'une solution? –

Répondre

0

Parce que je n'ai pas une solution à ce que je recours à hériter d'une autre classe de la tâche:

class ErrorLoggingTask(Task): 
    def on_failure(self, exc, task_id, args, kwargs, einfo): 
     logger.error("Task failed: %s" % einfo) 

par exemple

@shared_task(base=ErrorLoggingTask) 
def my_task(arg): 
    logger.info("working")