Question

Je fais des tentatives avec du céleri comme dans l'exemple de docs:

@task()
def add(x, y):
    try:
        ...
    except Exception, exc:
        add.retry(exc=exc, countdown=60)  # override the default and
                                          # retry in 1 minute

Comment puis-je augmenter la reprise à chaque fois que la nouvelle tentative se produit pour ce travail - par exemple 60 secondes, 2 minutes, 4 minutes et ainsi de suite jusqu'à ce que le dépassement maximal soit soulevé?

Était-ce utile?

La solution

Depuis Version 4.2 vous pouvez utiliser des options autoretry_for et retry_backoff À ces fins, par exemple:

@task(max_retries=10, autoretry_for=(Exception,), retry_backoff=60)
def add(x, y):
    pass

Autres conseils

Voici un moyen simple de créer un retard plus important chaque fois que la tâche est évaluée. Cette valeur est mise à jour par le céleri lui-même, vous n'avez donc pas besoin de gérer quoi que ce soit vous-même.

@task()
def add(x, y):
    try:
        ...
    except Exception as exc:
        raise add.retry(exc=exc, countdown=60 * add.request.retries) 

Remarque: la première tâche est répétée avec le compte à rebours de 0. car le nombre de tentatives est de 0 pour la première exécution.

Gardez une variable avec votre dernier temps de réessayer et multipliez-la par 2 à chaque fois jusqu'à ce qu'elle dépasse le niveau que vous voulez (ou, gardez un compte si vous préférez un certain nombre de fois ...)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top