Como resolver TimeoutError ao lidar com conexões externas?

O erro TimeoutError ocorre quando uma operação, como uma requisição HTTP ou acesso a banco de dados, excede o tempo limite de resposta definido.

Como resolver TimeoutError ao lidar com conexões externas?

O erro TimeoutError ocorre quando uma operação que depende de comunicação externa, como chamadas de API ou consultas a bancos de dados, demora mais do que o tempo limite definido.

Exemplo do erro

import requests

try:
    response = requests.get('https://exemplo.com', timeout=0.01)
    print(response.text)
except requests.exceptions.Timeout:
    print("A requisição demorou muito e foi interrompida.")

Esse código gera um erro de timeout porque o tempo limite definido (timeout=0.01) é muito curto para uma resposta real do servidor.

Como resolver o erro TimeoutError

1. Aumente o tempo limite

Uma solução comum é aumentar o valor do timeout para garantir que a conexão tenha tempo suficiente para ser estabelecida.

response = requests.get('https://exemplo.com', timeout=10)  # 10 segundos

2. Implemente tentativas de reconexão

Outra abordagem é criar um mecanismo de retry para repetir a requisição caso ocorra um timeout.

import requests
from requests.exceptions import Timeout

def fazer_requisicao(url, tentativas=3):
    for _ in range(tentativas):
        try:
            response = requests.get(url, timeout=5)
            return response.text
        except Timeout:
            print("Tempo limite excedido. Tentando novamente...")
    return "Falha ao obter resposta após múltiplas tentativas."

print(fazer_requisicao('https://exemplo.com'))

Neste código, tentamos realizar a requisição três vezes antes de desistir.

Em aplicações que dependem de conexões externas, como APIs e bancos de dados, é fundamental gerenciar timeouts corretamente. Ignorar esse erro pode levar a falhas no sistema e má experiência do usuário.

Algumas aplicações:

  • Evitar que aplicações fiquem travadas esperando respostas externas.
  • Garantir resiliência ao lidar com conexões instáveis.
  • Melhorar a experiência do usuário ao reduzir falhas inesperadas.

Dicas para quem está começando

  • Sempre defina um timeout ao fazer requisições externas.
  • Implemente tentativas de reconexão para evitar falhas temporárias.
  • Monitore logs para identificar problemas frequentes de timeout.
Foto de Fernando Antunes
Contribuições de
Fernando Antunes

Arquiteto de sistemas e especialista em performance de aplicações Node.js e SQL.

Mais sobre o autor
Compartilhe este tutorial: Como resolver TimeoutError ao lidar com conexões externas

Compartilhe este tutorial

Continue aprendendo:

O que significa RuntimeError: maximum recursion depth exceeded

O erro RuntimeError: maximum recursion depth exceeded ocorre quando uma função recursiva ultrapassa o limite permitido pelo Python, causando um estouro de pilha (stack overflow).

Tutorial anterior

Como corrigir OSError: [Errno 28] No space left on device

O erro OSError: [Errno 28] No space left on device ocorre quando o disco rígido ou partição onde o sistema está gravando arquivos fica sem espaço disponível.

Próximo tutorial