首页 > 解决方案 > 读取在线资产的图像大小时完成时间不稳定(使用 Python 和请求)

问题描述

我正在尝试通过 Internet 读取图像大小(使用 Python 2.7 和requests)。

测试图片网址1:https://img-9gag-fun.9cache.com/photo/ax1WByM_460s.jpg

测试图片网址2:https://img-9gag-fun.9cache.com/photo/abMego9_460s.jpg

代码非常少:

from io import BytesIO
from PIL import Image

def get_web_img_dimensions(url):
    """
    Returns image dimensions
    """
    req = requests.get(url, headers={"Range": "bytes=0-1023",'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7'})
    im = Image.open(BytesIO(req.content))
    print im.size

在提供的测试图像 url 1上运行它需要127几秒钟。我接下来尝试了text image url 20.5这次我的代码在几秒钟内返回了正确答案。这两个图像几乎是在我的浏览器上立即加载的,这让我认为读取 1024 字节应该没什么大不了的。

过了一会儿,我再次尝试测试图片 url 1。这一次,0.5返回图像尺寸只需要几秒钟。但大约在同一时间,尝试测试图片 url 2需要128几秒钟。奇怪的角色反转!

这里的引擎盖下发生了什么?这些波动的时间差异似乎根本与图像大小无关。其次,我如何使这段代码短路——这样如果它花费的时间超过 x 秒,它就会中断并返回None?顺便说一下,使用urllibor的结果urllib2同样不稳定。

标签: python-2.7python-requests

解决方案


罪魁祸首确实是timeout为通话启用了一个。

注意:timeout如果目标在timeout. 何时中止连接并不是硬性限制。在这里快速浏览一下超时:http : //docs.python-requests.org/en/latest/api/#requests.request


推荐阅读