Workify logoЕдинственный бизнес-инструмент, который вам нуженWorkify
Menu

429 Rate Limited: исправление ошибок «слишком много запросов»

Устраните ошибки лимита запросов MCP 429 с помощью стратегий повторов, решений для пакетной обработки и экспоненциальной задержки. Узнайте об уровнях лимитов запросов и лучших практиках, позволяющих не достигать лимитов.

Что такое лимиты запросов

Лимиты запросов предотвращают злоупотребления и обеспечивают справедливое использование API MCP. При превышении лимита вы получаете ошибку 429 и должны подождать, прежде чем делать новые запросы.

Что вызывает срабатывание лимитов

  • Слишком большое количество запросов за короткий промежуток времени
  • Превышение квот запросов в минуту или в час
  • Достижение лимитов одновременных запросов
  • Повторное выполнение ресурсоёмких запросов (большие наборы результатов)

Уровни лимитов запросов

Бесплатный уровень

  • Запросов в минуту: 60
  • Запросов в час: 1 000
  • Одновременных запросов: 5
  • Подходит для: личного использования, тестирования, небольших рабочих процессов

Стандартный уровень

  • Запросов в минуту: 300
  • Запросов в час: 10 000
  • Одновременных запросов: 20
  • Подходит для: команд, регулярной автоматизации, умеренного использования

Корпоративный уровень

  • Запросов в минуту: 1 000+
  • Запросов в час: индивидуальные лимиты
  • Одновременных запросов: 100+
  • Подходит для: больших команд, интенсивной автоматизации, интеграций

Частые причины

1. Плотные циклы без задержек

Вызов инструментов MCP в цикле без какой-либо паузы между запросами:

Проблемный код

// ❌ ПЛОХО: нет задержки между запросами
for task_id in task_ids:
    update_task(task_id, status="done")
    // Сразу достигает лимита после 60 запросов

Решение: добавьте задержки

// ✅ ХОРОШО: добавьте задержку между запросами
for task_id in task_ids:
    update_task(task_id, status="done")
    sleep(100)  // задержка 100 мс = макс. 10 запр./сек

2. Параллельные запросы, превышающие лимит

Одновременное выполнение слишком большого числа параллельных запросов:

Проблема

Запуск 50 параллельных запросов, когда лимит составляет 5 одновременных.

Решение: ограничьте параллелизм

  • Обрабатывайте пакетами (по 5 для бесплатного уровня, по 20 для стандартного)
  • Используйте очередь с максимальным числом обработчиков
  • Реализуйте семафор или ограничитель запросов в своём коде

3. Отсутствие логики повторов

Когда вы достигаете лимита, немедленный повтор только ухудшает ситуацию:

Проблема

Немедленный повтор после ошибки 429 вызывает ещё больше ошибок.

Решение: экспоненциальная задержка

Ждите всё дольше между повторами: 1 с, 2 с, 4 с, 8 с, 16 с...

Решения и лучшие практики

1. Реализуйте экспоненциальную задержку

Стратегия повторов

def call_with_retry(func, max_retries=5):
    retry_count = 0
    base_delay = 1  // Начинаем с 1 секунды

    while retry_count 

2. Пакетные операции

Схема пакетной обработки

Объедините несколько обновлений в меньшее число вызовов API:

  1. Соберите все изменения, которые хотите внести
  2. Сгруппируйте в пакеты по 10–20 элементов
  3. Обрабатывайте каждый пакет с задержкой между пакетами
  4. Добавьте экспоненциальную задержку для повторов

Подробные примеры см. в руководстве по пакетной обработке.

3. Используйте заголовок Retry-After

Умный повтор

Ответ 429 включает заголовок Retry-After, который сообщает, как долго нужно ждать:

response = make_request()
if response.status == 429:
    retry_after = response.headers.get('Retry-After', 60)
    print(f"Rate limited. Waiting {retry_after}s...")
    sleep(retry_after)
    // Повторить запрос

4. Оптимизируйте шаблоны запросов

Сократите количество запросов

  • Используйте фильтры: получайте только нужные задачи, а не все
  • Пагинация: получайте меньшие страницы вместо огромных наборов результатов
  • Кэширование: при необходимости кэшируйте результаты чтения на несколько минут
  • Агрегированные запросы: получайте данные один раз и обрабатывайте локально вместо повторных запросов

Пример: массовое обновление с защитой от лимитов

Полная реализация

import time

def bulk_update_tasks(task_ids, status):
    BATCH_SIZE = 10
    DELAY_BETWEEN_BATCHES = 1  // 1 секунда
    MAX_RETRIES = 5

    for i in range(0, len(task_ids), BATCH_SIZE):
        batch = task_ids[i:i+BATCH_SIZE]
        retry_count = 0

        while retry_count 

Мониторинг и предотвращение

Лучшие практики

  • Отслеживайте количество запросов: ведите учёт того, сколько запросов вы делаете
  • Добавляйте задержки заранее: не ждите ошибок 429, чтобы замедлиться
  • Используйте ограничители запросов: реализуйте ограничение запросов на стороне клиента
  • Следите за заголовками ответов: проверяйте заголовок X-RateLimit-Remaining
  • При необходимости повысьте уровень: если регулярно достигаете лимитов, рассмотрите повышение

Чек-лист быстрого исправления

  • ✅ Добавлены задержки между запросами (минимум 100–200 мс)
  • ✅ Реализована экспоненциальная задержка для повторов
  • ✅ Одновременные запросы ограничены лимитом вашего уровня
  • ✅ Используется заголовок Retry-After из ответов 429
  • ✅ Операции обрабатываются пакетами вместо отдельных запросов
  • ✅ Используются фильтры и пагинация для сокращения количества запросов
  • ✅ Отслеживаются заголовки лимитов запросов в ответах

Когда повышать уровень

Рассмотрите повышение, если:

  • Регулярно достигаете лимитов запросов, несмотря на оптимизации
  • Вашим рабочим процессам требуется более 60 запросов в минуту
  • Вы запускаете автоматизированные системы, которым нужна более высокая пропускная способность
  • Размер команды растёт, и несколько человек используют MCP
  • Вы создаёте интеграции, которые часто выполняют запросы

Свяжитесь с отделом продаж для получения цен корпоративного уровня и индивидуальных лимитов.

Связанные разделы устранения неполадок

Continue Reading

Устранение ошибки 403 Forbidden

Исправление ошибок MCP 403 Forbidden — недостаточные права доступа, несоответствие областей действия, проблемы доступа к...

Сбои вызовов инструментов MCP

Отладка сбоев вызовов инструментов MCP — некорректные аргументы, неверные ID, отсутствующие поля, ошибки валидации. Стра...