ATUALIZAÇÃO: https://requests.readthedocs.io/en/master/user/advanced/#timeouts
Na nova versão do requests
:
Se você especificar um único valor para o tempo limite, assim:
r = requests.get('https://github.com', timeout=5)
O valor do tempo limite será aplicado aos tempos limite connect
e ao read
tempo limite. Especifique uma tupla se desejar definir os valores separadamente:
r = requests.get('https://github.com', timeout=(3.05, 27))
Se o servidor remoto estiver muito lento, você pode pedir para as solicitações aguardarem uma resposta eternamente, passando None como um valor de tempo limite e, em seguida, recuperando uma xícara de café.
r = requests.get('https://github.com', timeout=None)
Minha resposta antiga (provavelmente desatualizada) (postada há muito tempo):
Existem outras maneiras de superar esse problema:
1. Use a TimeoutSauce
classe interna
De: https://github.com/kennethreitz/requests/issues/1928#issuecomment-35811896
import requests from requests.adapters import TimeoutSauce
class MyTimeout(TimeoutSauce):
def __init__(self, *args, **kwargs):
connect = kwargs.get('connect', 5)
read = kwargs.get('read', connect)
super(MyTimeout, self).__init__(connect=connect, read=read)
requests.adapters.TimeoutSauce = MyTimeout
Esse código deve fazer com que definamos o tempo limite de leitura como igual ao tempo limite de conexão, que é o valor do tempo limite que você passa na sua chamada Session.get (). (Observe que eu realmente não testei esse código, por isso pode precisar de alguma depuração rápida, apenas o escrevi diretamente na janela do GitHub.)
2. Use uma bifurcação de solicitações da kevinburke: https://github.com/kevinburke/requests/tree/connect-timeout
A partir de sua documentação: https://github.com/kevinburke/requests/blob/connect-timeout/docs/user/advanced.rst
Se você especificar um único valor para o tempo limite, assim:
r = requests.get('https://github.com', timeout=5)
O valor do tempo limite será aplicado aos tempos limite de conexão e leitura. Especifique uma tupla se desejar definir os valores separadamente:
r = requests.get('https://github.com', timeout=(3.05, 27))
O kevinburke solicitou que ele fosse mesclado no projeto de solicitações principais, mas ainda não foi aceito.