Resources

Python

Requests timeouts & retries

Last updated 10 July 2026

  • python
  • requests
  • http

Also known as: python requests timeout, requests library, python http, requests retry

Always set a timeout

requests has no default timeout — a hung connection will block forever unless you set one.

import requests

response = requests.get('https://api.example.com/data', timeout=5)

Separate connect / read timeouts

response = requests.get(
    'https://api.example.com/data',
    timeout=(3, 10),  # (connect timeout, read timeout)
)

Handling a timeout

try:
    response = requests.get('https://api.example.com/data', timeout=5)
    response.raise_for_status()
except requests.exceptions.Timeout:
    print('Request timed out')
except requests.exceptions.HTTPError as e:
    print(f'HTTP error: {e}')

Retrying with backoff

from requests.adapters import HTTPAdapter, Retry

session = requests.Session()
retries = Retry(total=3, backoff_factor=0.5, status_forcelist=[502, 503, 504])
session.mount('https://', HTTPAdapter(max_retries=retries))

response = session.get('https://api.example.com/data', timeout=5)

Notes

  • raise_for_status() raises on 4xx/5xx responses — call it explicitly, requests won’t do it for you.
  • status_forcelist only retries on those specific status codes; connection errors are retried regardless.