知識点説明2:requestsのtimeout()について


タイムアウト
サーバがタイムリーに応答できないように、外部サーバに送信されるリクエストの大部分はtimeoutパラメータを持つ必要があります.デフォルトでは、timeout値が明示的に指定されていない限り、requestsは自動的にタイムアウト処理を行いません.timeoutがなければ、コードは数分以上停止する可能性があります.
接続タイムアウトとは、クライアントがリモートマシンポートへの接続を実現したとき(connect()に対応)、Requestが待つ秒数です.TCPパケット再送ウィンドウ(TCP packet retransmission window)のデフォルトサイズが3であるため、接続タイムアウトを3の倍数よりやや大きい数値に設定するのが良い実践方法である.
爬虫類エージェントというブロックでは、リクエストがタイムアウトする問題がよく発生します.コードはどこにあるのか、エラーを報告しなくてもrequestsリクエストの応答はありません.
通常の処理はrequestsである.get()文にtimeout制限リクエスト時間を加える
req = requests.get(url, headers=headers, proxies=proxies, timeout=5)

timeout=5を設定した後も長時間応答しない問題が依然として存在することが判明した場合、timeoutのパラメータを以下のように細分化して修正すると、問題は消失する
req = requests.get(url, headers=headers, proxies=proxies, timeout=(3,7))

timeoutの使用中にValueErrorエラーメッセージ(類似:ValueError:Timeout value connect was Timeout(connect=2.0、read=2.0、total=None)、but it must be an int or float.)に遭遇した場合、これはpython-requests version 2.4.3-4のバージョンのバグです.requestsを更新する必要があります.
pip install -U requests

timeout=(3,7)のパラメータの具体的な意味について私もよく分かりませんが、意味を知っている子供靴は伝言を残すことができます.