【发布时间】:2021-02-22 23:37:53
【问题描述】:
我正在使用 HEAD 方法在 Python (3) 中向 1000 个特定网站(其中一些似乎不再存在)发送请求,并报告有关其响应标头的统计信息。脚本必须在五分钟内完成。显然,您可以通过减少超时来使请求花费更少的时间,但是您减少的超时越多,超时错误就越多,并且捕获它们似乎非常昂贵。例如,当超时为 0.3 秒时,有 700 个好的请求和 300 个超时错误,而捕获超时错误的总时间本身就超过了 5 分钟。减少超时确实会减少捕获每个超时错误的时间,因为请求在抛出错误之前必须等待超时,但超时次数也会增加。在 timeout=0.05 和 timeout=0.03 时,我只能获得低于 5 分钟捕获超时错误的总时间,但包括花在请求上的时间在内的总时间仍然大于 5 分钟。 timeout=0.02 导致只有 20 个站点可访问,总错误处理时间为 5:17,timeout=0.01 导致没有站点可访问。分配任务的人坚持认为这是可能的,所以我一定是做错了什么。我尝试使用 requests.Session 对象,但这并没有导致任何明显的加速。我还能做些什么来加快速度?
【问题讨论】:
-
您是否允许/应该使用线程?一个简单的
concurrent.futures.ThreadPoolExecutor可能会用于并行化您的查询,这样您就不会在最慢的服务器上等待;它的map方法会很容易。
标签: python-3.x optimization python-requests