Réessais et inspection¶
Objectif : réessayer une tâche qui échoue et suivre son état.
Ce que vous allez apprendre : max_attempts fixe le nombre d'essais d'une
tâche.
Si le gestionnaire lève une erreur et qu'il reste des essais, la tâche est
remise en file ; sinon elle passe en failed.
On inspecte l'état d'une tâche avec get_job et le nombre de tâches en attente
avec pending_count.
Deuxième palier du niveau intermédiaire de la progression Jobs.
Ce que ce starter montre¶
- enfiler une tâche avec plusieurs essais via
max_attempts; - inspecter l'état d'une tâche avec
get_jobet la file avecpending_count.
Fonctions Forge utilisées¶
| Fonction | Rôle dans ce starter | Référence |
|---|---|---|
enqueue(task, payload, max_attempts=...) |
Enfile une tâche avec un nombre d'essais. | Opt-ins |
get_job(job_id) |
Renvoie l'état d'une tâche (Job) ou None. |
Opt-ins |
pending_count() |
Nombre de tâches en attente. | Opt-ins |
1. Enfiler avec des réessais¶
from forge_mvc_jobs import enqueue, get_job, pending_count
job_id = enqueue("rapport.genere", {"client": 42}, max_attempts=3)
print("en attente :", pending_count())
Comprendre ce code¶
max_attempts=3autorise jusqu'à trois essais pour cette tâche.- Si le gestionnaire lève une erreur et qu'il reste des essais, la tâche est remise en file.
- Une fois les essais épuisés, la tâche passe en statut
failed. - Une tâche sans gestionnaire associé est directement marquée
failed. pending_count()indique combien de tâches attendent encore d'être traitées.
2. Suivre l'état d'une tâche¶
job = get_job(job_id)
if job is not None:
print(job.status, job.attempts, "/", job.max_attempts)
if job.status == "failed":
print("dernière erreur :", job.last_error)
Comprendre ce code¶
get_job(job_id)renvoie un objetJobfigé, ouNonesi l'identifiant est inconnu.job.statusvautpending,running,doneoufailed.job.attemptscompte les essais déjà consommés ;job.max_attemptsest la limite.job.last_errorcontient le message du dernier échec, utile pour diagnostiquer.
À retenir¶
max_attemptsfixe le nombre d'essais ; l'échec remet en file tant qu'il en reste.get_job(id)donne l'état complet d'une tâche (status,attempts,last_error).pending_count()mesure la charge restante de la file.
Après ce starter¶
Vous savez gérer les échecs et suivre les tâches.
Faisons le point sur le niveau intermédiaire.