ソース: https://stackoverflow.com/a/35504626
backoff_factorで指定した秒数xリトライ回数の分だけ間隔を空けてリトライしてくれる。以下の場合はリトライ1回目は1秒、2回目は2秒。
status_forcelistで指定されたステータスコードが返ってきた場合、もしくはタイムアウトした時にリトライする。
Retryへ指定できるパラメータはここに書いてある。
import requests
from requests.packages.urllib3.util.retry import Retry
from requests.adapters import HTTPAdapter
s = requests.Session()
retries = Retry(total=5,
backoff_factor=1,
status_forcelist=[ 500, 502, 503, 504 ])
s.mount('https://', HTTPAdapter(max_retries=retries))
s.mount('http://', HTTPAdapter(max_retries=retries))
r = s.request('GET', 'http://localhost:5000', timeout=2, headers={'Authorization': 'foobar'})
r.raise_for_status()
追記
retryというライブラリ使えば行けそう!と思ったけど、このライブラリだとステータスコードによる処理の振り分けとかができないみたい。