Python请求使用keep-alive加速

时间:2014-08-11 09:11:25

标签: python http python-requests python-sockets

在HTTP协议中,您可以使用keep-alive在一个套接字中发送许多请求,然后立即从服务器接收响应,这样可以显着加快整个过程。有没有办法在python请求lib中执行此操作?或者还有其他方法可以使用请求lib来加快速度吗?

1 个答案:

答案 0 :(得分:82)

是的,有。使用requests.Sessionit will do keep-alive by default

我想我应该提供一个简单的例子:

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

请注意,它会重置已断开的连接,即重新建立与服务器的连接以发出新请求。