จัดการคำขอยกเลิก
หยุดงานอย่างเรียบร้อยเมื่อไคลเอ็นต์ยกเลิก
จัดการคำขอยกเลิก เป็นบทเรียน MCP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน MCP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส MCP Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงมีการยกเลิก
ผู้ใช้อาจปิดแชตหรือเปลี่ยนใจขณะที่เครื่องมือระยะยาวกำลังทำงาน MCP ช่วยให้ไคลเอ็นต์ส่งการยกเลิกเพื่อหยุดงานที่ไม่จำเป็น
การแจ้งเตือนการยกเลิก
ไคลเอ็นต์ส่งสัญญาณนี้ด้วยข้อความnotifications/cancelledซึ่งระบุ requestId ที่ต้องการหยุด การส่งนี้เป็นแบบส่งแล้วจบโดยไม่รอคำตอบ
{"method": "notifications/cancelled",
"params": {"requestId": 7, "reason": "user aborted"}}นี่เป็นเพียงคำขอหนึ่งรายการ
เฉพาะคำขอที่กำลังดำเนินอยู่เท่านั้นที่ยกเลิกได้ โดยจับคู่ผ่านrequestId ส่วนการแจ้งเตือนซึ่งไม่มีรหัส จะไม่สามารถยกเลิกได้
การยกเลิกเป็นความพยายามอย่างดีที่สุด
การยกเลิกเป็นคำขออย่างสุภาพ ไม่ใช่การบังคับหยุด งานของคุณอาจใกล้เสร็จอยู่แล้ว จึงควรถือว่าการยกเลิกเป็นสัญญาณตามความเหมาะสมให้ค่อย ๆ หยุดทำงาน
asyncio จัดการการเชื่อมต่อให้
ใน Python SDK การยกเลิกจะมาถึงในรูปของ asyncio.CancelledError ที่ถูกส่งภายในเครื่องมือซึ่งกำลังรอผล โดยทั่วไปคุณไม่ต้องตรวจสอบเครื่องหมายด้วยตนเอง
import asyncio
# CancelledError is raised at the next await pointปล่อยให้ส่งต่อขึ้นไป
พฤติกรรมที่ถูกต้องและง่ายที่สุดคือปล่อยให้ CancelledError แพร่ขึ้นไป เฟรมเวิร์กจะหยุดงานและข้ามการส่งผลลัพธ์ปกติ
@mcp.tool()
async def crunch(ctx: Context) -> str:
for item in items:
await heavy(item) # cancel lands hereล้างทรัพยากรเมื่อยกเลิก
หากเครื่องมือของคุณถือไฟล์หรือล็อกอยู่ ให้ครอบการทำงานเพื่อให้การยกเลิกยังปล่อยทรัพยากรได้ โครงสร้างtry/finallyรับประกันว่าการล้างทรัพยากรจะทำงานระหว่างออกจากส่วนนี้
try:
await do_work()
finally:
handle.close()อย่ากลืนข้อผิดพลาดนี้
อย่าดักจับ CancelledError แล้วทำงานต่อไปอย่างเงียบ ๆ เพราะจะทำให้จุดประสงค์ทั้งหมดของการยกเลิกสูญเปล่า และทำให้ไคลเอ็นต์เข้าใจว่างานถูกหยุดแล้ว
# Anti-pattern:
# except asyncio.CancelledError:
# pass # do NOT do thisไม่มีการตอบกลับหลังยกเลิก
เมื่อคำขอถูกยกเลิกแล้ว อย่าส่งผลลัพธ์หรือข้อผิดพลาดสำหรับคำขอนั้น ไคลเอ็นต์ไปทำงานต่อแล้ว และจะเพิกเฉยต่อ การตอบกลับ ที่มาล่าช้า
คืนทรัพยากรที่กันไว้
การเคารพการยกเลิกอย่างรวดเร็วช่วยคืนทรัพยากร CPU เครือข่าย และโทเค็นของโมเดล เซิร์ฟเวอร์ที่หยุดได้ทันทีถือเป็น ผู้ใช้งานที่มีความรับผิดชอบ ในระบบเอเจนต์ที่มีงานหนาแน่น
ตรวจสอบตามจุดธรรมชาติ
สำหรับลูปที่ใช้ CPU หนักและไม่มี await ให้แทรก await asyncio.sleep(0) สั้น ๆ เพื่อเปิดโอกาสให้การยกเลิกเกิดขึ้นระหว่างแต่ละรอบ
for chunk in chunks:
crunch(chunk)
await asyncio.sleep(0)ตรวจสอบอย่างรวดเร็ว
ตรวจสอบว่าการยกเลิกปรากฏขึ้นในเครื่องมือ MCP ของ Python อย่างไร
สรุป: การยกเลิก
คุณได้เห็นการแจ้งเตือน ที่ถูกยกเลิก ได้เรียนรู้ว่าเหตุใดการยกเลิกจึงทำได้เพียงแบบพยายามอย่างดีที่สุด และวิธีปล่อยให้ CancelledError แพร่ต่อไปพร้อมทำความสะอาดทรัพยากร ทำได้ดีมากครับ/ค่ะ!
เรียนรู้ Python ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 30
- บทเรียน
- 120
คำถามที่พบบ่อย
บทเรียน “จัดการคำขอยกเลิก” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “จัดการคำขอยกเลิก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส MCP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส MCP Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “จัดการคำขอยกเลิก”
หยุดงานอย่างเรียบร้อยเมื่อไคลเอ็นต์ยกเลิก คุณปฏิบัติ MCP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน MCP Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน MCP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “จัดการคำขอยกเลิก” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน MCP Academy นี้ได้ไหม
ได้ บทเรียน MCP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ส่งความคืบหน้าสำหรับงานที่ใช้เวลานาน
- จัดการคำขอยกเลิก
- การบันทึกแบบมีโครงสร้างไปยังไคลเอ็นต์
- ตั้งระดับบันทึกขณะทำงาน