使用python request请求时,每次请求都会建立一次短连接:
- 每次请求都需要建立tcp连接,这个过程时耗时的,比传输数据的时间要长
- 短时间建立大量的短连接,对网络设置的CPU是一种消耗,而且可能会出现TIME-WAIT问题
用requests.Session()能够使得HTTP复用同一个TCP连接,保持长连接,而且可以通知配置adapter实现更加丰富的功能,另外session能够自动保持cookie
import requests
s = requests.Session()
adapter = requests.adapters.HTTPAdapter(pool_connections = 10,
pool_maxsize = 50, max_retries = 3, pool_block=False)
s.mount('http://', adapter)
adapter能够实现很丰富的功能:
- max_retries:失败重试
- pool_connections表示连接池的大小,pool_maxsize与多线程有关,最好是与线程数目保持一致,详细解释见:https://www.cnblogs.com/pengyusong/p/5802929.html
参考:
https://zhuanlan.zhihu.com/p/114283369
https://www.cnblogs.com/pengyusong/p/5802929.html
python - What's the meaning of pool_connections in requests.adapters.HTTPAdapter? - Stack Overflow