1 回答
TA贡献1883条经验 获得超3个赞
我相信这是由于列表中的非错误网址造成的,这些网址指向可能需要很长时间才能加载为响应对象的图像和视频,并最终消耗大量时间才能完成任务。
很难提前判断这是否属实,但您当然可以通过添加用于time.time()测量每个请求所用时间并打印其状态的代码来测试它。
请注意,除非您await response.read()或同等人员,否则客户端不会“加载”响应正文,只有标头“加载”。尽管如此,一些无故障的 URL 很可能需要很长时间才能返回标头。也有可能一些有问题的需要很长时间才能返回错误状态,也许是那些你没有手动检查的。asyncio.gather()所花费的时间与列表中最长的 URL 一样长,因此,如果您有数千个 URL,则至少其中一些肯定会滞后。
fetch但假设你的前提是正确的,你可以通过包装来实现限制wait_for:
async def fetch_with_limit(session, url):
try:
return await asyncio.wait_for(fetch(session, url), 1)
except asyncio.TimeoutError:
return True # took more than 1s, probably non-faulty
现在您可以使用fetch_with_limit来代替fetch.
添加回答
举报
