我有一个可用的Python脚本,通过向每个站点发送HTTP请求并测量响应来检查我们拥有的6,300个站点以确保它们已启动。目前该脚本需要大约40分钟才能完全运行,我对其他一些加速脚本的方法感兴趣,两个想法是线程化或多个运行实例。
这是现在的执行顺序:
这看起来似乎可以通过线程显着加速,但由于我不熟悉线程,我不太确定该流程的外观如何。
如果有人可以提供示例高级流程和其他任何有关使用线程的指针,或者提供有关如何改进脚本的任何其他见解,我们将不胜感激。
答案 0 :(得分:2)
你可以看看scrapy框架。它是为网络抓取而制作的。它是异步的,建立在扭曲和非常快的基础上。
在你的情况下,你可以获得要刮掉的域列表,只看它是否会返回200而不实际抓取任何东西。它应该快得多。
这是链接: http://scrapy.org/
答案 1 :(得分:2)
流程看起来像这样:
您可能希望调整线程数,从而调整池,而不是每个域调整6300个线程。
答案 2 :(得分:1)
线程肯定你需要什么。它将删除算法的序列化特性,并且由于它主要是IO限制,因此您将通过并行发送HTTP请求获得很多收益。
您的流量将变为:
urllib
向每个域发送HTTP请求您可以通过创建带有队列的n
工作线程来更好地使用此算法,并将域添加到队列中,而不是为每个域创建一个线程。我只是想让你的事情变得更容易,因为你不熟悉线程。
答案 3 :(得分:-1)
我猜你应该去线程,调查最佳的进程数量,以避免杀死你的客户端。 Python手册提供了很好的例子,请看这里Download multiple pages concurrently?