MCP Academy · Lezione

Gestire le richieste di annullamento

Interrompa il lavoro correttamente quando il client annulla l'operazione.

Lezione 2 di 413 passaggi

Gestire le richieste di annullamento è una lezione MCP Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento MCP Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso MCP Academy include 4 lezioni in totale.

Perché esiste la cancellazione

L’utente potrebbe chiudere una chat o cambiare idea mentre è in esecuzione uno strumento lungo. MCP consente al client di inviare una cancellazione, così il lavoro inutile può terminare.

La notifica cancelled

Il client lo segnala con un messaggio notifications/cancelled che indica il requestId da interrompere. È un’operazione fire-and-forget, senza risposta.

{"method": "notifications/cancelled",
 "params": {"requestId": 7, "reason": "user aborted"}}

È semplicemente una richiesta

È possibile cancellare solo una richiesta in corso, identificata dal relativo requestId. Le notifiche, che non hanno un id, non possono mai essere cancellate.

La cancellazione è best-effort

Una cancellazione è una richiesta cortese, non un arresto forzato. Il lavoro potrebbe essere già in fase di conclusione, quindi la consideri un’indicazione di tipo best-effort per terminare gradualmente.

asyncio gestisce il collegamento

Nel Python SDK, una cancellazione arriva come un asyncio.CancelledError generato all’interno dello strumento in attesa. Di solito non deve controllare personalmente alcun flag.

import asyncio
# CancelledError is raised at the next await point

Lasci che si propaghi

Il comportamento corretto più semplice consiste nel lasciare che CancelledError si propaghi. Il framework interromperà quindi l’attività e non invierà un risultato normale.

@mcp.tool()
async def crunch(ctx: Context) -> str:
    for item in items:
        await heavy(item)  # cancel lands here

Eseguire la pulizia dopo la cancellazione

Se lo strumento mantiene aperto un file o acquisisce un lock, lo racchiuda in una struttura che rilasci comunque le risorse in caso di cancellazione. Un blocco try/finally garantisce che la pulizia venga eseguita durante l’uscita.

try:
    await do_work()
finally:
    handle.close()

Non lo ignori

Non intercetti mai CancelledError per poi continuare in silenzio. Così vanifichi l'intero scopo della cancellazione e lasci al client l'impressione che il lavoro sia stato interrotto.

# Anti-pattern:
# except asyncio.CancelledError:
#     pass  # do NOT do this

Nessuna risposta dopo la cancellazione

Una volta cancellata una richiesta, non inviare né un risultato né un errore per quella richiesta. Il client è già passato oltre e qualsiasi risposta tardiva viene semplicemente ignorata.

Liberare le risorse

Rispettare rapidamente la cancellazione libera CPU, rete e token del modello. Un server che si arresta prontamente si comporta da buon cittadino in un agent affollato.

Controllare nei punti naturali

Per i cicli CPU intensivi senza await, inserisca qua e là un breve await asyncio.sleep(0), così la cancellazione ha la possibilità di intervenire tra un'iterazione e l'altra.

for chunk in chunks:
    crunch(chunk)
    await asyncio.sleep(0)

Verifica rapida

Verifichi come viene resa visibile la cancellazione in uno strumento MCP Python.

Riepilogo: cancellazione

Ha visto la notifica cancelled, perché le cancellazioni sono best effort e come lasciare propagare CancelledError eseguendo al contempo la pulizia necessaria. Ottimo lavoro!

Gratis per iniziare

Impara Python con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
30
Lezioni
120

Domande Frequenti

La lezione «Gestire le richieste di annullamento» è gratuita?

Sì — il testo completo di «Gestire le richieste di annullamento» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso MCP Academy, passa a CoddyKit PRO. Il corso MCP Academy include 4 lezioni in totale.

Cosa imparerò in «Gestire le richieste di annullamento»?

Interrompa il lavoro correttamente quando il client annulla l'operazione. Eserciti MCP Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare MCP Academy?

Non è richiesta alcuna esperienza precedente. MCP Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Gestire le richieste di annullamento»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione MCP Academy?

Sì. Ogni lezione MCP Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Inviare l'avanzamento delle attività lunghe
  2. Gestire le richieste di annullamento
  3. Logging strutturato verso il client
  4. Impostare i livelli di log in esecuzione
← Torna a MCP Academy