Aller au contenu principal
🔒 Mode aperçu. Les quinze premières leçons Foundations sont gratuites ; celle-ci est Pro. Démarrez un trial de 7 jours pour débloquer l'éditeur, les conseils AI et le reste du programme. Carte requise, annulez à tout moment dans Dashboard.Démarrer le trial de 7 jours →
← CoursSenior Deep-DivesModule 8 · Async correctness patternsasyncio.TaskGroup — structured concurrency (3.11+) replaces gatherpredict132 / 161
+150 XP
Tâche
📝 **Tâche :** Prédisez la sortie exacte de 6 lignes. Trois tâches sont générées à l'intérieur d'un TaskGroup : ok-rapide (10 ms, sans échec), boom (20 ms, augmente ValueError), ok-lent (50 ms, sans échec). Le TaskGroup détecte l'exception de boom et imprime un résumé. Identifiez les lignes de tâches qui se déclenchent réellement et celles qui sont annulées en cours de sommeil. 📋 Implémentez la fonction ci-dessus. Les tests s'exécutent automatiquement. 💡 **Indice :** Relisez la théorie si vous êtes bloqué.
Prédis la sortie

Lis le code attentivement

import asyncio


events: list[str] = []


async def task(name: str, work: float, fail: bool = False) -> None:
    events.append(f"{name} start")
    await asyncio.sleep(work)
    if fail:
        events.append(f"{name} raising")
        raise ValueError(f"{name} failed")
    events.append(f"{name} done")


async def main() -> None:
    try:
        async with asyncio.TaskGroup() as tg:
            tg.create_task(task("ok-fast", 0.01))
            tg.create_task(task("boom", 0.02, fail=True))
            tg.create_task(task("ok-slow", 0.05))
    except* ValueError as eg:
        events.append(f"caught {len(eg.exceptions)} exception(s)")

    for e in events:
        print(e)


asyncio.run(main())

Que va afficher le programme ? Écris ici :

💬 Discussion

Soyez le premier à poser une question ou partager une astuce.
Connectez-vous pour rejoindre la discussion. La lecture est gratuite.
Chargement de la discussion…