通过一次制作多个来加速网络请求?

时间:2013-08-15 08:11:18

标签: python multithreading http request lxml

运行所有发出HTTP请求的多个进程会明显快于一个吗?

我正在使用lxml.html.parse

解析大约一百万个网址

首先,我运行了一个Python进程,它简单地循环遍历url并在每个进程上调用lxml.html.parse(myUrl),然后在再次执行此操作之前等待该方法的其余部分处理数据。这样,我就可以按10000 urls / hour。

的顺序处理

我想象如果我运行了几个相同的进程(处理不同的URL集),我会加快我可以获取这些URL的速度。令人惊讶的是,(至少对我来说),我这次测量了10400小时/小时,这并不是特别好,因为我确信两者都在剧烈波动。

我的问题是:为什么没有比这更快地运行其中三个流程?

我知道一个事实,即我的请求没有以任何方式影响他们的目标,所以我不认为这是他们。我没有足够的带宽来使这些额外的过程值得吗?如果没有,我该如何衡量?我完全误解了我的MacBook如何运行这些流程? (我假设在不同的核心上并发线程,或者大致相当于它的东西。)还有其他什么呢?

(如果我修改了任何网络术语,我会道歉 - 我对这类东西不熟悉。我们非常感谢您的修改。)

注意:我认为在三台不同的服务器上运行这些进程可能会快3倍左右。 (这是正确的吗?)我对此不感兴趣 - 最坏的情况是,10000 /小时足以达到我的目的。

编辑:来自speedtest.net(两次):

With 3 running:
Ping: 29 ms (25 ms)
Download speed: 6.63 mbps (7.47 mbps)
Upload speed: 3.02 mbps (3.32 mbps)

With all paused:
Ping: 26 ms (28 ms)
Download speed: 9.32 mbps (8.82 mbps)
Upload speed: 5.15 mbps (6.56 mbps)

1 个答案:

答案 0 :(得分:1)

考虑到你大约7mbit/s(1MB / s计数高)。 如果你得到2.888 pages per second(每小时10'400页)。我说你的连接速度最大化(特别是如果你正在运行ADSL或WiFi,你肯定会用TCP连接握手)。

您在每个流程中下载的页面大致包含354kB个数据,考虑到它已经接近您的带宽限制,这个数据并不算差。

考虑TCP标头以及实际建立连接时发生的所有情况(SYN,ACK等)您的下降速度为tbh。

注意:这只是考虑到下载速率远高于您的上传速度,这也很重要,因为它实际上是将您的连接请求,标头发送到Web服务器等。我知道大多数3G调制解调器和ADSL线路声称是“全双工”,它们确实不是(尤其是ADSL)。尽管你的ISP告诉你,你永远不会在两个方向都全速运行。如果你想完成这些任务,你需要切换到光纤。

聚苯乙烯。我假设你理解mega- bit 和mega- byte 之间的基本区别。