强制从 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 有啥区别?