HTTP requests.post timeout

All requests take a timeout keyword argument. 1

The requests.post is simply forwarding its arguments to requests.request 2

When the app is down, a ConnectionError is more likely than a Timeout. 3

try:
    requests.post(url, data=payload, timeout=5)
except requests.Timeout:
    # back off and retry
    pass
except requests.ConnectionError:
    pass

Use the timeout parameter:

r = requests.post(url, data=payload, timeout=1.5)

Note: timeout is not a time limit on the entire response download; rather, an exception is raised if the server has not issued a response for timeout seconds (more precisely, if no bytes have been received on the underlying socket for timeout seconds). If no timeout is specified explicitly, requests do not time out.