urllib3.util.Timeout()的超时设置在Python中的实际应用
发布时间:2023-12-13 19:14:06
urllib3是Python中一个常用的HTTP库,它是一个提供高级连接池和重试功能的模块,可在HTTP请求中使用。
在urllib3中,Timeout()类是用来设置请求的超时时间的。它可以对连接超时和读取超时进行设置。Timeout()类的构造函数如下:
class Timeout:
def __init__(self, connect=None, read=None, total=None, ):
self._connect = connect
self._read = read
self._total = total
@staticmethod
def from_float(timeout):
""" Convert a float to a Timeout object """
return Timeout(connect=timeout, read=timeout, total=timeout)
@staticmethod
def _normalize_timeout_value(value):
"""
Normalizes timeout value.
Returns 1s if value is None, a positive integer or a float,
essentially making the connection pool's timeout value the shortest
interval between certificates we allow num / HTTPSConnectionPool.timeout.
"""
if value is None or value <= 0:
return 1.0
return value
@property
def connect_timeout(self):
""" Timeout for initial connection establishment """
return self._normalize_timeout_value(self._connect)
@property
def read_timeout(self):
""" Timeout for waiting on server responses """
return self._normalize_timeout_value(self._read)
@property
def total_timeout(self):
""" Total timeout """
if self._total is not None:
return self._normalize_timeout_value(self._total)
if None not in (self._connect, self._read):
return self._connect + self._read
return None
实际应用中,可以通过Timeout()类的实例来设置超时时间,并将其传递给urllib3的连接池或者请求的timeout参数。下面是一个使用例子:
import urllib3
# 创建Timeout实例,设置连接超时时间为2秒,读取超时时间为3秒
timeout = urllib3.util.Timeout(connect=2.0, read=3.0)
# 创建HTTP连接池
http = urllib3.PoolManager(timeout=timeout)
# 发起GET请求
response = http.request('GET', 'http://www.example.com')
# 打印返回的内容
print(response.data)
在上面的例子中,Timeout(connect=2.0, read=3.0)设置了连接超时时间为2秒和读取超时时间为3秒。创建HTTP连接池时传入了该timeout实例,该连接池将使用该超时时间。
另外,Timeout()类还提供了from_float()方法,可以将一个float类型的超时时间转换为Timeout()实例,方便直接使用已知的超时时间值。
import urllib3
# 将超时时间2.5转换为Timeout实例
timeout = urllib3.util.Timeout.from_float(2.5)
# 创建HTTP连接池
http = urllib3.PoolManager(timeout=timeout)
# 发起GET请求
response = http.request('GET', 'http://www.example.com')
# 打印返回的内容
print(response.data)
以上就是urllib3.util.Timeout()的超时设置的实际应用例子。可以根据实际需求,灵活使用Timeout()类,设置合适的超时时间,确保请求在规定时间内完成。
