1. ホーム
  2. python

[解決済み] Pythonのリクエストはkeep-aliveで高速化する

2023-07-02 13:55:46

質問

HTTPプロトコルでは、keep-aliveを使用して1つのソケットで多くのリクエストを送信し、一度にサーバから応答を受信することができますので、全体の処理が大幅に高速化されます。Pythonのリクエストライブラリでこれを行う方法はありますか?あるいは、requests libを使用してこれをうまくスピードアップする他の方法はありますか?

どのように解決するのですか?

はい、あります。 使用方法 requests.Session はデフォルトでキープアライブします。 .

簡単な例を載せておきましょうか。

import logging
import requests

logging.basicConfig(level=logging.DEBUG)
s = requests.Session()
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
s.get('http://httpbin.org/cookies/set/anothercookie/123456789')
r = s.get("http://httpbin.org/cookies")
print(r.text)

このようなログメッセージが発生することに気づくでしょう。

INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): httpbin.org
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies/set/sessioncookie/123456789 HTTP/1.1" 302 223
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies HTTP/1.1" 200 55
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies/set/anothercookie/123456789 HTTP/1.1" 302 223
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies HTTP/1.1" 200 90
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies HTTP/1.1" 200 90

少し待って、最後の get と呼ぶ

INFO:requests.packages.urllib3.connectionpool:Resetting dropped connection: httpbin.org
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies HTTP/1.1" 200 90

落とした接続をリセットする、つまり新しいリクエストをするためにサーバとの接続を再確立することに注意してください。