python-resilience
Faz seu agente lidar melhor com falhas temporárias. Ele tenta novamente ações que falharam, tornando o programa mais confiável.
O que ela faz
Esta ferramenta ajuda a criar programas de computador mais confiáveis. Ela faz com que o programa tente novamente automaticamente se algo der errado temporariamente, como uma falha de rede, e espera um pouco antes de tentar de novo.
Quando usar
- ✓Quando uma parte do seu programa precisa se conectar a outro serviço e pode falhar.
- ✓Se você quer que seu programa continue funcionando mesmo com pequenos problemas temporários.
- ✓Para evitar sobrecarregar um serviço que está com problemas, tentando de novo aos poucos.
Exemplo do que pedir para a IA
“Faça meu programa tentar novamente até 3 vezes se a conexão com o site falhar, esperando um pouco mais a cada tentativa.”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Por dentro, o código usa uma técnica chamada 'retry' (tentar de novo). Se uma operação falha, ele espera um tempo que aumenta a cada tentativa (exponential backoff) antes de tentar novamente, evitando que o programa trave.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add wshobson/agents --skill python-resilienceOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/wshobson/agents/main/plugins/python-development/skills/python-resilience/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Padrões de Resiliência em Python
Crie aplicações Python tolerantes a falhas que lidam graciosamente com falhas transitórias, problemas de rede e interrupções de serviço. Padrões de resiliência mantêm os sistemas funcionando quando as dependências são não confiáveis.
Quando Usar Esta Habilidade
- Adicionar lógica de retentativa a chamadas de serviço externas
- Implementar timeouts para operações de rede
- Construir microsserviços tolerantes a falhas
- Lidar com limitação de taxa e backpressure
- Criar decoradores de infraestrutura
- Projetar circuit breakers
Conceitos Principais
1. Falhas Transitórias vs. Permanentes
Retente erros transitórios (timeouts de rede, problemas temporários de serviço). Não retente erros permanentes (credenciais inválidas, requisições ruins).
2. Backoff Exponencial
Aumente o tempo de espera entre as retentativas para evitar sobrecarregar serviços em recuperação.
3. Jitter
Adicione aleatoriedade ao backoff para evitar o "thundering herd" (manada trovejante) quando muitos clientes tentam novamente simultaneamente.
4. Retentativas Limitadas
Limite tanto o número de tentativas quanto a duração total para evitar loops infinitos de retentativa.
Início Rápido
from tenacity import retry, stop_after_attempt, wait_exponential_jitter
@retry(
stop=stop_after_attempt(3),
wait=wait_exponential_jitter(initial=1, max=10),
)
def call_external_service(request: dict) -> dict:
return httpx.post("https://api.example.com", json=request).json()
Padrões Fundamentais
Padrão 1: Retentativa Básica com Tenacity
Use a biblioteca tenacity para lógica de retentativa de nível de produção. Para casos mais simples, considere a funcionalidade de retentativa integrada ou uma implementação customizada leve.
from tenacity import (
retry,
stop_after_attempt,
stop_after_delay,
wait_exponential_jitter,
retry_if_exception_type,
)
TRANSIENT_ERRORS = (ConnectionError, TimeoutError, OSError)
@retry(
retry=retry_if_exception_type(TRANSIENT_ERRORS),
stop=stop_after_attempt(5) | stop_after_delay(60),
wait=wait_exponential_jitter(initial=1, max=30),
)
def fetch_data(url: str) -> dict:
"""Fetch data with automatic retry on transient failures."""
response = httpx.get(url, timeout=30)
response.raise_for_status()
return response.json()
Padrão 2: Retentar Apenas Erros Apropriados
Liste especificamente exceções transitórias. Nunca retente:
ValueError,TypeError- Estes são bugs, não problemas transitóriosAuthenticationError- Credenciais inválidas não se tornarão válidas- Erros HTTP 4xx (exceto 429) - Erros do cliente são permanentes
from tenacity import retry, retry_if_exception_type
import httpx
# Define what's retryable
RETRYABLE_EXCEPTIONS = (
ConnectionError,
TimeoutError,
httpx.ConnectTimeout,
httpx.ReadTimeout,
)
@retry(
retry=retry_if_exception_type(RETRYABLE_EXCEPTIONS),
stop=stop_after_attempt(3),
wait=wait_exponential_jitter(initial=1, max=10),
)
def resilient_api_call(endpoint: str) -> dict:
"""Make API call with retry on network issues."""
return httpx.get(endpoint, timeout=10).json()
Padrão 3: Retentativas de Código de Status HTTP
Retente códigos de status HTTP específicos que indicam problemas transitórios.
from tenacity import retry, retry_if_result, stop_after_attempt
import httpx
RETRY_STATUS_CODES = {429, 502, 503, 504}
def should_retry_response(response: httpx.Response) -> bool:
"""Check if response indicates a retryable error."""
return response.status_code in RETRY_STATUS_CODES
@retry(
retry=retry_if_result(should_retry_response),
stop=stop_after_attempt(3),
wait=wait_exponential_jitter(initial=1, max=10),
)
def http_request(method: str, url: str, **kwargs) -> httpx.Response:
"""Make HTTP request with retry on transient status codes."""
return httpx.request(method, url, timeout=30, **kwargs)
Padrão 4: Retentativa Combinada de Exceção e Status
Lide com exceções de rede e códigos de status HTTP.
from tenacity import (
retry,
retry_if_exception_type,
retry_if_result,
stop_after_attempt,
wait_exponential_jitter,
before_sleep_log,
)
import logging
import httpx
logger = logging.getLogger(__name__)
TRANSIENT_EXCEPTIONS = (
ConnectionError,
TimeoutError,
httpx.ConnectError,
httpx.ReadTimeout,
)
RETRY_STATUS_CODES = {429, 500, 502, 503, 504}
def is_retryable_response(response: httpx.Response) -> bool:
return response.status_code in RETRY_STATUS_CODES
@retry(
retry=(
retry_if_exception_type(TRANSIENT_EXCEPTIONS) |
retry_if_result(is_retryable_response)
),
…
Perguntas frequentes
O que são falhas temporárias?
São problemas que se resolvem sozinhos, como uma rede que ficou lenta por um momento ou um serviço que estava fora do ar mas já voltou.
Por que esperar mais a cada tentativa?
Para dar tempo para o serviço que falhou se recuperar. Se você tentar muitas vezes seguidas, pode piorar o problema.
O que é 'jitter'?
É adicionar um pequeno tempo aleatório às esperas. Isso evita que muitos programas tentem de novo exatamente ao mesmo tempo, o que poderia sobrecarregar o serviço.
Detalhes
Descrição original do autor
Python resilience patterns including automatic retries, exponential backoff, timeouts, and fault-tolerant decorators. Use when adding retry logic, implementing timeouts, building fault-tolerant services, or handling transient failures.
repo: wshobson/agents
Popularidade
- Estrelas no GitHub
- 41 mil
- Posição no ranking
- #4933
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
screen-reader-testing
Faz seu agente testar sites usando leitores de tela para garantir que sejam acessíveis.
wshobson/agents
wcag-audit-patterns
Ajuda seu agente a auditar sites para acessibilidade e corrigir problemas de acordo com as diretrizes WCAG.
wshobson/agents
multi-reviewer-patterns
Faz seu agente coordenar revisões de código paralelas, deduplicando achados e consolidando relatórios.
wshobson/agents
parallel-debugging
Permite ao agente depurar problemas complexos com investigações paralelas e análise de causa raiz.
wshobson/agents
Skills parecidas
api-connector-builder
Faz seu agente construir novas conexões com APIs seguindo o padrão já existente. Use quando precisar adicionar mais uma integração sem criar um novo jeito de fazer.
affaan-m/ECC
api-design
Ajuda seu agente a projetar APIs REST seguindo as melhores práticas. É útil para definir como as APIs se comunicam, como os erros são mostrados e como organizar os dados.
affaan-m/ECC
backend-patterns
Ajuda seu agente com padrões de arquitetura do lado do servidor e otimização de banco de dados. É útil para construir ou revisar o código que roda no servidor.
affaan-m/ECC