更新:https : //requests.readthedocs.io/en/master/user/advanced/#timeouts
の新しいバージョンrequests
:
次のように、タイムアウトに単一の値を指定した場合:
r = requests.get('https://github.com', timeout=5)
タイムアウト値はconnect
、read
タイムアウトとタイムアウトの両方に適用されます。値を個別に設定する場合は、タプルを指定します。
r = requests.get('https://github.com', timeout=(3.05, 27))
リモートサーバーの速度が非常に遅い場合は、タイムアウト値としてNoneを渡し、コーヒーを1杯取得することで、リクエストに永久に応答を待つように指示できます。
r = requests.get('https://github.com', timeout=None)
私の古い(おそらく時代遅れの)回答(これはかなり前に投稿されました):
この問題を解決する方法は他にもあります。
1. TimeoutSauce
内部クラスを使用する
送信元: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
このコードにより、読み取りタイムアウトが接続タイムアウトと同じに設定されます。これは、Session.get()呼び出しで渡すタイムアウト値です。(私は実際にこのコードをテストしていないため、簡単なデバッグが必要な場合があるので、GitHubウィンドウに直接書き込んだだけです。)
2. kevinburkeからのリクエストのフォークを使用します: https : //github.com/kevinburke/requests/tree/connect-timeout
そのドキュメントから:https : //github.com/kevinburke/requests/blob/connect-timeout/docs/user/advanced.rst
次のように、タイムアウトに単一の値を指定した場合:
r = requests.get('https://github.com', timeout=5)
タイムアウト値は、接続タイムアウトと読み取りタイムアウトの両方に適用されます。値を個別に設定する場合は、タプルを指定します。
r = requests.get('https://github.com', timeout=(3.05, 27))
kevinburkeはメインのリクエストプロジェクトにマージするように要求しましたが、まだ受け入れられていません。