挂载 Session 对象的目的是什么?
What is the purpose of mounting a Session object?
我在一些代码片段和 Requests documentation:
中看到过类似的东西
import requests
sess = requests.Session()
adapter = requests.adapters.HTTPAdapter(max_retries=20)
sess.mount('https://', adapter)
我试图更好地了解 .mount()
在这里做了什么。这样的话,是不是只增加所有调用sess.request()
的允许重试次数?它是否在模拟类似的东西:
for _ in range(max_retries):
try:
return sess.request(...)
except:
pass
或者还有更多的事情要发生吗?
我知道 requests.Session
个实例是 initialized 具有 max_retries=0
的适配器,所以以上只是基于此的预感。
在这种情况下,了解 .mount()
如何具体改变会话对象的行为会很有帮助。
.mount()
确实如您所想,它只是将自定义适配器安装到给定模式。
在您给出的示例中,它只是增加了允许的重试次数。但实际上它可以根据使用的适配器做更多事情。
例如,您还可以通过HTTPAdapter(pool_maxsize=100)
更改连接池大小。您可以通过创建一个完全自定义的适配器来做一些进一步的自定义,例如 MyHTTPAdapter
.
选择权交给你了。
我在一些代码片段和 Requests documentation:
中看到过类似的东西import requests
sess = requests.Session()
adapter = requests.adapters.HTTPAdapter(max_retries=20)
sess.mount('https://', adapter)
我试图更好地了解 .mount()
在这里做了什么。这样的话,是不是只增加所有调用sess.request()
的允许重试次数?它是否在模拟类似的东西:
for _ in range(max_retries):
try:
return sess.request(...)
except:
pass
或者还有更多的事情要发生吗?
我知道 requests.Session
个实例是 initialized 具有 max_retries=0
的适配器,所以以上只是基于此的预感。
在这种情况下,了解 .mount()
如何具体改变会话对象的行为会很有帮助。
.mount()
确实如您所想,它只是将自定义适配器安装到给定模式。
在您给出的示例中,它只是增加了允许的重试次数。但实际上它可以根据使用的适配器做更多事情。
例如,您还可以通过HTTPAdapter(pool_maxsize=100)
更改连接池大小。您可以通过创建一个完全自定义的适配器来做一些进一步的自定义,例如 MyHTTPAdapter
.
选择权交给你了。