Não tenho certeza se esta é a maneira correta, pois não consegui encontrar o uso desta timeout
documentação.
Vá para o fundo. Está definitivamente lá. Você pode procurá-lo na página, pressionando Ctrl F e digitando timeout
.
Você está usando timeout
corretamente no seu exemplo de código.
Você pode especificar o timeout de algumas maneiras diferentes, como explicado na documentação:
Se você especificar um único valor para o timeout, assim:
r = requests.get('https://github.com', timeout=5)
O valor de timeout será aplicado tanto para o timeout connect
como para o read
timeout. Especifique um tuple se você quiser definir os valores separadamente:
r = requests.get('https://github.com', timeout=(3.05, 27))
Se o servidor remoto for muito lento, você pode dizer aos Pedidos para esperar para sempre por uma resposta, passando Nenhum como valor de timeout e depois recuperando uma xícara de café.
r = requests.get('https://github.com', timeout=None)
Tente usar https://httpstat.us/200?sleep=5000
para testar o seu código.
Por exemplo, isto levanta uma exceção porque 0,2 segundos não é tempo suficiente para estabelecer uma conexão com o servidor:
import requests
link = "https://httpstat.us/200?sleep=5000"
with requests.Session() as s:
try:
r = s.get(link, timeout=(0.2, 10))
print(r.text)
except requests.exceptions.Timeout as e:
print(e)
Saída:
HTTPSConnectionPool(host='httpstat.us', port=443): Read timed out. (read timeout=0.2)
Isto levanta uma excepção porque o servidor espera 5 segundos antes de enviar a resposta, o que é mais longo do que o tempo read
limite de 2 segundos definido:
import requests
link = "https://httpstat.us/200?sleep=5000"
with requests.Session() as s:
try:
r = s.get(link, timeout=(3.05, 2))
print(r.text)
except requests.exceptions.Timeout as e:
print(e)
Output:
HTTPSConnectionPool(host='httpstat.us', port=443): Read timed out. (read timeout=2)
Você menciona especificamente o uso de um timeout dentro de uma sessão. Então talvez você queira um objeto de sessão que tenha um timeout padrão. Algo parecido com isto:
import requests
link = "https://httpstat.us/200?sleep=5000"
class EnhancedSession(requests.Session):
def __init__(self, timeout=(3.05, 4)):
self.timeout = timeout
return super().__init__()
def request(self, method, url, **kwargs):
print("EnhancedSession request")
if "timeout" not in kwargs:
kwargs["timeout"] = self.timeout
return super().request(method, url, **kwargs)
session = EnhancedSession()
try:
response = session.get(link)
print(response)
except requests.exceptions.Timeout as e:
print(e)
try:
response = session.get(link, timeout=1)
print(response)
except requests.exceptions.Timeout as e:
print(e)
try:
response = session.get(link, timeout=10)
print(response)
except requests.exceptions.Timeout as e:
print(e)
Saída:
id="pré-5"