Requests timeouts & retries
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,requestswon’t do it for you.status_forcelistonly retries on those specific status codes; connection errors are retried regardless.