Dans mon code ci-dessous, j'utilise requests.post
. Quelles sont les possibilités de continuer simplement si le site est en panne?
J'ai le code suivant:
def post_test():
import requests
url = 'http://example.com:8000/submit'
payload = {'data1': 1, 'data2': 2}
try:
r = requests.post(url, data=payload)
except:
return # if the requests.post fails (eg. the site is down) I want simly to return from the post_test(). Currenly it hangs up in the requests.post without raising an error.
if (r.text == 'stop'):
sys.exit() # I want to terminate the whole program if r.text = 'stop' - this works fine.
Comment puis-je faire expirer le délai request.post ou revenir de post_test () si example.com ou que son application/submit est en panne?
Utilisez le paramètre timeout
:
r = requests.post(url, data=payload, timeout=1.5)
Remarque:
timeout
n'est pas une limite de temps pour le téléchargement de la réponse entière; une exception est plutôt levée si le serveur n'a pas émis de réponse pendanttimeout
secondes (plus précisément, si aucun octet n'a été reçu sur le socket sous-jacent pendanttimeout
secondes). Si aucun délai d'expiration n'est spécifié explicitement, les demandes n'expirent pas.
Toutes les demandes prennent un argument de mot-clé de délai d'attente. 1
Le requests.post
simplifie la transmission de ses arguments à requests.request
2
Lorsque l'application est arrêtée, il y a plus de chances d'avoir un ConnectionError
qu'un Timeout
.
try:
requests.post(url, data=payload, timeout=5)
except requests.Timeout:
# back off and retry
pass
except requests.ConnectionError:
pass