强制从 URL 下载图像的最长时间

Posted

技术标签:

【中文标题】强制从 URL 下载图像的最长时间【英文标题】:Force a maximum time to download image from URL 【发布时间】:2020-05-19 09:56:03 【问题描述】:

我正在尝试实现一种方法,该方法尝试尝试从 url 下载图像。为此,我使用 requests lib。我的代码示例是:

while attempts < nmr_attempts:
        try:
            attempts += 1
            response = requests.get(self.basis_url, params=query_params, timeout=response_timeout)
        except Exception as e:
            pass

每次尝试花费的时间不能超过发出请求的“response_timeout”。但是似乎 timeout 变量没有做任何事情,因为它不尊重我自己给出的时间。

如何限制 response.get() 调用的最大阻塞时间。 提前致谢

【问题讨论】:

您为 response_timeout 设置的值是多少? 值为 1.5 秒。但是,如果我指定 0.1 秒,则响应时间完全相同。我想要的是在达到超时时抛出异常。独立地,如果请求完成与否。 【参考方案1】:

您可以尝试跟随(摆脱 try-except 块),看看是否有帮助? except Exception 可能正在抑制 requests.get 抛出的异常。

while attempts < nmr_attempts:
    response = requests.get(self.basis_url, params=query_params, timeout=response_timeout)

或者使用您的原始代码,您可以捕获 requests.exceptions.ReadTimeout 异常。如:

while attempts < nmr_attempts:
    try:
        attempts += 1
        response = requests.get(self.basis_url, params=query_params, timeout=response_timeout)
    except requests.exceptions.ReadTimeout as e:
        do_something()

【讨论】:

但是我想在超时的情况下捕获异常。我将尝试更好地解释:假设您正在向无效 URL 发出请求。我想要的是不要等待超过响应超时,直到收到来自服务器的响应。在我的例子中,这个响应在它的内容中带来了一个图像。 @MiguelAndrade 我更新了我的答案。您可以捕获 requests.exceptions.ReadTimeout 而不是通用异常。 它抛出了另一个异常。我抓住了 requests.exceptions.ConnectTimeout 但它也不起作用。我已经打印了发出请求和抛出异常之间的时间差,它始终是 1 秒。独立于超时。

以上是关于强制从 URL 下载图像的最长时间的主要内容,如果未能解决你的问题,请参考以下文章

从图像 url 下载图像方面,URLSession 与 GCD 有啥区别?

从 URL 下载 UITableIViewCell 图像

如何从 URL 下载图像

浏览器/HTML 强制从 src="data:image/jpeg;base64..." 下载图像

如何使用从适配器传递的 url 下载图像

从 URL 下载图像并添加到滚动视图子视图