欢迎访问宙启技术站
智能推送

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()类,设置合适的超时时间,确保请求在规定时间内完成。