--- title: Повторить временную ошибку description: Настройте безопасный retry и ограничьте число попыток. sources: - eazy_sdk.ClientConfig - eazy_sdk.RetryPolicy - eazy_sdk.clients.CallOptions api_fingerprint: "sha256:072f9d43dffc2cc7c0cb530dda98b948d33cb80a634c22e75752130e9e5f12a6" --- `RetryPolicy.safe(...)` повторяет временные отказы только для операций, безопасность которых можно доказать. Пример получает `503`, заново готовит `GET` и принимает второй ответ. ```{literalinclude} ../../../../../../examples/docs/reliability_retry.py :language: python :start-after: "# region docs: reliability-retry" :end-before: "# endregion docs: reliability-retry" ``` :::{dropdown} Файл целиком ```{literalinclude} ../../../../../../examples/docs/reliability_retry.py :language: python ``` ::: ```text result: ready attempts: 2 ``` Каждая попытка заново разрешает зависимости с политикой `ATTEMPT`, строит wire-представление, шифрует и подписывает байты. Одноразовый stream можно повторить только через `ReplayableStreamBody`. Для безопасного POST операция должна явно объявить `idempotent=True`. | Бюджет | Что ограничивает | |---|---| | `max_attempts` | Все попытки логического вызова | | `transport_retries` | Повторы после ошибки транспорта | | `auth_retries` | Повторы после обновления сессии | | `max_redirects` | Переходы по `Location` | | `RetryPolicy` | Методы, статусы, задержку и backoff | Общий timeout и cancellation останавливают ожидание. Protection replay имеет отдельное доказательство и бюджет, но всё равно расходует обычную попытку отправки. ## Дальше - {doc}`Обработать redirect ` - {doc}`Ограничить частоту отправки ` - {doc}`Добавить middleware `