python-2.7 - 读取在线资产的图像大小时完成时间不稳定(使用 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 2。0.5
这次我的代码在几秒钟内返回了正确答案。这两个图像几乎是在我的浏览器上立即加载的,这让我认为读取 1024 字节应该没什么大不了的。
过了一会儿,我再次尝试测试图片 url 1。这一次,0.5
返回图像尺寸只需要几秒钟。但大约在同一时间,尝试测试图片 url 2需要128
几秒钟。奇怪的角色反转!
这里的引擎盖下发生了什么?这些波动的时间差异似乎根本与图像大小无关。其次,我如何使这段代码短路——这样如果它花费的时间超过 x 秒,它就会中断并返回None
?顺便说一下,使用urllib
or的结果urllib2
同样不稳定。
解决方案
罪魁祸首确实是timeout
为通话启用了一个。
注意:timeout
如果目标在timeout
. 何时中止连接并不是硬性限制。在这里快速浏览一下超时:http : //docs.python-requests.org/en/latest/api/#requests.request
推荐阅读
- gremlin - 无法使用 Gremlin 连接到 AWS Neptune
- django - 未找到“form_detail”的反向。“form_detail”不是有效的视图函数或模式名称
- awk - 不同文件的awk总和结果保存在不同的文件中
- javascript - 移动设备检测方向锁定在 javascript / HTML5
- owl - 在 ObjectProperty 上保护 OWL DataProperty
- hash - 可以将大端 xxhash 与小端哈希进行比较吗?
- python - Twitter API - 如何获取 OAUTH_FILE?
- python - Beautiful Soup 和 Pandas 的 UTF-8 错误
- javascript - 从持久浏览器文件存储中以 html 格式显示图像
- sql - 检查值是否存在于任何 SQL 表中