Requests报”requests.exceptions.Timeout: {timeout message} “的原因以及解决办法

yizhihongxing

原因

请求超时,即请求在规定的时间内未得到响应。这可能是由于以下原因造成的:

  • 网络连接慢;
  • 请求目标的服务器负载过高;
  • 目标服务器出现故障;
  • 请求超时时间过短。

解决方法:

(1)调整请求超时时间

可以通过调整请求超时时间来解决超时问题。有两种方式可以设置超时时间:

  • 通过设置timeout参数:Requests库允许通过timeout参数来指定请求的超时时间,如下所示:
import requests
response = requests.get('https://www.example.com', timeout=3)

上述代码将请求在3秒内没有响应,则会产生超时异常。

  • 通过全局设置:可以通过将timeout参数设为None,在全局中设置请求超时时间:
import requests
requests.adapters.DEFAULT_RETRIES = 5
requests.post(url, data=data, timeout=None)

(2)增加重试次数

如果出现了请求超时,可以通过增加重试次数来解决。Requests库允许在出现网络问题时自动重试请求,以增加请求成功的几率。使用Session对象,并对Session对象进行一些参数设置(如max_retries)即可实现该功能:

import requests
from requests.adapters import HTTPAdapter

session = requests.Session()
retry = HTTPAdapter(max_retries=5)
session.mount('http://', retry)
session.mount('https://', retry)
response = session.get('https://www.example.com')

(3)增加连接池的大小

在使用Requests库发送请求时,它会从连接池中取出可用连接来发送请求,从而减少了每次请求建立连接的时间。但是,如果连接池中的连接数过少,可能会导致请求超时。因此,可以通过增加连接池的大小来提高请求成功的几率。

import requests
from requests.adapters import HTTPAdapter

session = requests.Session()
adapter = HTTPAdapter(pool_connections=10, pool_maxsize=20, pool_block=True)
session.mount('http://', adapter)
session.mount('https://', adapter)
response = session.get('https://www.example.com')

这里的pool_connections参数指定了连接池中最多有多少个连接,pool_maxsize参数指定了连接池可以增长到多大,pool_block参数指定了是否在连接池达到最大值时阻塞。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Requests报”requests.exceptions.Timeout: {timeout message} “的原因以及解决办法 - Python技术站

(0)
上一篇 2023年3月19日
下一篇 2023年3月19日

相关文章

合作推广
合作推广
分享本页
返回顶部