Gérer les demandes d’annulation
Arrêtez proprement le travail lorsque le client l’annule.
Gérer les demandes d’annulation est une leçon MCP Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage MCP Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours MCP Academy comprend 4 leçons au total.
Pourquoi l’annulation existe
Un utilisateur peut fermer une conversation ou changer d’avis pendant l’exécution d’un outil long. MCP permet au client d’envoyer une annulation afin d’arrêter le travail inutile.
La notification cancelled
Le client le signale avec un message notifications/cancelled indiquant le requestId qu’il souhaite arrêter. Il s’agit d’un envoi sans réponse attendue.
{"method": "notifications/cancelled",
"params": {"requestId": 7, "reason": "user aborted"}}Ce n’est qu’une demande
Seule une demande en cours peut être annulée, en fonction de son requestId. Les notifications, qui n’ont pas d’identifiant, ne peuvent jamais être annulées.
L’annulation est une mesure de meilleure volonté
Une annulation est une demande courtoise, pas un arrêt forcé. Votre travail est peut-être déjà sur le point de se terminer ; considérez-la donc comme une indication de meilleure volonté vous invitant à terminer progressivement.
asyncio s’occupe de la connexion
Avec le SDK Python, une annulation arrive sous la forme d’une asyncio.CancelledError levée dans votre outil en attente. Vous n’avez généralement pas besoin de vérifier vous-même un indicateur.
import asyncio
# CancelledError is raised at the next await pointLaissez-la se propager
Le comportement correct le plus simple consiste à laisser CancelledError remonter. Le framework arrête alors la tâche et évite d’envoyer un résultat normal.
@mcp.tool()
async def crunch(ctx: Context) -> str:
for item in items:
await heavy(item) # cancel lands hereNettoyez après une annulation
Si votre outil conserve un fichier ouvert ou un verrou, encapsulez-le afin qu’une annulation libère tout de même les ressources. Un bloc try/finally garantit que le nettoyage sera effectué lors de la sortie.
try:
await do_work()
finally:
handle.close()Ne l’ignorez pas
Ne capturez jamais CancelledError pour continuer discrètement. Cela va à l’encontre de l’objectif même de l’annulation et laisse le client penser que le travail a été arrêté.
# Anti-pattern:
# except asyncio.CancelledError:
# pass # do NOT do thisAucune réponse après l’annulation
Une fois une demande annulée, n’envoyez ni résultat ni erreur pour celle-ci. Le client est passé à autre chose et toute réponse tardive est simplement ignorée.
Libérer les ressources
Respecter rapidement l’annulation libère du temps CPU, du réseau et des jetons du modèle. Un serveur qui s’arrête rapidement se comporte en bon citoyen au sein d’un agent très sollicité.
Vérifier aux points naturels
Pour les boucles CPU serrées sans await, insérez de temps en temps un court await asyncio.sleep(0) afin de laisser l’annulation intervenir entre deux itérations.
for chunk in chunks:
crunch(chunk)
await asyncio.sleep(0)Vérification rapide
Vérifiez comment l’annulation se manifeste dans un outil MCP Python.
Récapitulatif : annulation
Vous avez vu la notification cancelled, compris pourquoi les annulations sont nécessairement approximatives et appris à laisser CancelledError se propager tout en effectuant le nettoyage. Bravo !
Apprends Python avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 30
- Leçons
- 120
Questions Fréquemment Posées
La leçon « Gérer les demandes d’annulation » est-elle gratuite ?
Oui — le texte complet de « Gérer les demandes d’annulation » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours MCP Academy, passe à CoddyKit PRO. Le cours MCP Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Gérer les demandes d’annulation » ?
Arrêtez proprement le travail lorsque le client l’annule. Tu pratiques MCP Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer MCP Academy ?
Aucune expérience préalable n'est requise. MCP Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Gérer les demandes d’annulation » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon MCP Academy ?
Oui. Chaque leçon MCP Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Envoyer la progression des tâches longues
- Gérer les demandes d’annulation
- Journalisation structurée vers le client
- Définir les niveaux de journalisation à l’exécution