2017-10-10 4 views
0

J'ai un simple fichier test_celery.py avec le contenu suivant qui ne soient pas remis en cours d'exécution d'une tâche ayant échoué:tâche de céleri pas de nouvelle tentative

from celery import Celery 
import time 

app = Celery(
    'test_celery', 
    broker='amqp://', 
    backend='amqp' 
) 

@app.task(retries=4) 
def my_fail(): 
    try: 
     raise Exception() 
    except Exception as e: 
     print('Tring: {0}/{1}'.format(my_fail.request.retries, my_fail.max_retries)) 
     # Print log message with current retry 
     my_fail.retry(exc=e, max_retries=4, countdown=2) 

if __name__ == '__main__': 
    fail() 
    print('All done!') 

Malheureusement, quand je lance la tâche, il court une fois:

$ python test_celery.py 
Tring: 0/3 
Traceback (most recent call last): 
    File "test_celery.py", line 20, in <module> 
    my_fail() 
    File "/Users/alexgray/.virtualenvs/clearcare/lib/python3.4/site-packages/celery/local.py", line 191, in __call__ 
    return self._get_current_object()(*a, **kw) 
    File "/Users/alexgray/.virtualenvs/clearcare/lib/python3.4/site-packages/celery/app/task.py", line 380, in __call__ 
    return self.run(*args, **kwargs) 
    File "test_celery.py", line 17, in my_fail 
    my_fail.retry(exc=e, max_retries=4, countdown=2) 
    File "/Users/alexgray/.virtualenvs/clearcare/lib/python3.4/site-packages/celery/app/task.py", line 653, in retry 
    raise_with_context(exc or Retry('Task can be retried', None)) 
    File "test_celery.py", line 13, in my_fail 
    raise Exception() 
Exception 

Je suis sûr que je manque quelque chose évidente, mais je ne sais pas ce que je fais mal.

Répondre

1

par le celery docs, je pense que ce que vous voulez est d'augmenter effectivement l'appel de nouvelle tentative.

def my_fail(): 
    try: 
     raise Exception() 
    except Exception as e: 
     print('Tring: {0}/{1}'.format(my_fail.request.retries, my_fail.max_retries)) 
     # Print log message with current retry 
     raise my_fail.retry(exc=e, max_retries=4, countdown=2) 

Notez que nous élevons l'erreur au lieu de simplement appeler la tâche.

+0

Vous avez raison. J'ai aussi dû l'appeler comme my_fail.delay() dans main, pas my_fail() – grayaii