Безопасное завершение без зависаний
Защищайтесь от превышения времени ожидания и необработанных исключений.
«Безопасное завершение без зависаний» — бесплатный урок MCP Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения MCP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс MCP Academy содержит 4 уроков всего.
Зависший инструмент хуже неудачного
Инструмент, который понятно сообщает об ошибке, позволяет модели продолжить работу. Инструмент, который зависает, блокирует весь вызов, поэтому всегда предусматривайте своевременное завершение.
Перехватывайте непредвиденные ошибки
Оберните рискованную работу так, чтобы неожиданное исключение превращалось в понятную ошибку, а не в сбой. Сервер продолжит работать, а модель узнает, что именно не удалось выполнить.
try:
data = parse(raw)
except Exception as e:
raise ValueError("could not parse input")Всегда устанавливайте время ожидания
Любому сетевому или внешнему вызову требуется время ожидания. Без него медленный внешний сервис может навсегда занять ваш инструмент и остановить работу клиента.
import httpx
r = httpx.get(url, timeout=10.0)Предпочитайте асинхронность для операций ввода-вывода
Асинхронные инструменты позволяют одному медленному запросу ожидать завершения, не блокируя всё остальное, поэтому сервер тем временем продолжает обслуживать другие вызовы.
@mcp.tool()
async def fetch(url: str) -> str:
async with httpx.AsyncClient() as c:
r = await c.get(url, timeout=10)Учитывайте отмену
Если клиент отменил операцию, остановитесь без промедления. Обработка отмены освобождает ресурсы и предотвращает работу, результата которой уже никто не ждёт.
Ограничивайте циклы и повторные попытки
Ограничивайте любой цикл или повторную попытку. Неограниченная повторная попытка при сбое API может выполняться бесконечно, поэтому задайте максимальное число попыток и затем корректно завершите работу.
for attempt in range(3):
if try_call():
breakОсвобождайте открытые ресурсы
Используйте блоки with или finally, чтобы файлы и соединения всегда закрывались, даже если ошибка возникает в середине выполнения функции.
with open(path) as f:
return f.read()Корректно обрабатывайте частичный сбой
Если часть задания завершилась с ошибкой, верните полученные данные с пояснением, а не ничего. Даже частичный результат помогает модели принять решение.
Записывайте сведения о сбое на сервере
Сохраняйте подробности в журналах, а модели отправляйте только безопасное краткое описание. Вы сможете искать и исправлять ошибки, не раскрывая внутренние сведения.
Один сбой не должен останавливать сервер
Один неудачный вызов не должен останавливать процесс. Изоляция сбоев каждого инструмента сохраняет доступность всех остальных возможностей для клиентов.
Всегда что-нибудь возвращайте
Каждая ветвь выполнения инструмента должна завершаться ответом — успешным или содержащим ошибку. Отсутствие ответа заставляет клиента ждать, а модель — оставаться в ожидании.
Быстрая проверка
Зачем добавлять время ожидания для внешнего вызова в инструменте?
Итоги
Завершайте работу при ошибке быстро и никогда не зависайте: перехватывайте неожиданности, устанавливайте время ожидания, ограничивайте повторные попытки, освобождайте ресурсы, безопасно ведите журналы и всегда возвращайте ответ. ✅
Изучай Python с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 30
- Уроки
- 120
Часто задаваемые вопросы
Урок «Безопасное завершение без зависаний» бесплатный?
Да — полный текст урока «Безопасное завершение без зависаний» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс MCP Academy, подпишись на CoddyKit PRO. Курс MCP Academy содержит 4 уроков всего.
Чему я научусь в уроке «Безопасное завершение без зависаний»?
Защищайтесь от превышения времени ожидания и необработанных исключений. Ты практикуешь MCP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать MCP Academy?
Предыдущий опыт не требуется. MCP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Безопасное завершение без зависаний»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке MCP Academy?
Да. Каждый урок MCP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Ошибки инструментов, видимые модели
- Ошибки протокола и сбои инструментов
- Проверка входных данных перед действием
- Безопасное завершение без зависаний