运行所有HTTP请求的多个进程会比一个进程更快吗?
我正在用lxml.html.parse解析大约100万个urls
首先,我运行了一个process,它简单地遍历urls并在每个urls上调用lxml.html.parse(myUrl),然后等待该方法的其余部分处理数据,然后再这样做。通过这种方式,我能够按10000 urls/小时的顺序进行处理。
我想象如果运行几个相同的进程(处理不同的urls集),我会加快获取这些urls的速度。令人惊讶的是,(至少对我来说),这次我测量了10400 urls/小时,考虑到我确信两者都在剧烈波动,这并不是特别好。
我的问题是:为什么这些进程中的三个不能比一个更快呢?
我知道我的请求并没有以任何方式影响他们的目标,所以我不认为是他们。我没有足够的带宽让这些额外的进程值得吗?如果没有,我该如何衡量呢?我是否完全误解了我的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)发布于 2013-08-15 08:25:36
考虑到您有大致的7mbit/s (1MB/s计数高)。如果你得到2.888 pages per second (每小时10‘400页)。我想说的是,您正在提高连接速度(尤其是在运行ADSL或WiFi时,您肯定是在使用TCP连接握手)。
您正在下载一个页面,该页面在每个进程中大致包含数据的354kB,考虑到这已经接近了带宽的限制,这还不错。
考虑TCP报头和实际建立连接(SYN,ACK)时所发生的一切。(等等)你以下降的速度上升。
备注:--这只是考虑到比上传速度高得多的下载速度--这一点也很重要--考虑到这实际上是将连接请求、报头发送到web服务器等。而且我知道大多数3G调制解调器和ADSL线路都声称是“全双工”的,它们确实不是(特别是ADSL)。无论你的ISP告诉你什么,你永远不会在两个方向上全速执行。如果你想完成这样的任务,你需要切换到光纤。
Ps。我假设您理解mega-位和mega-字节之间的基本区别。
https://stackoverflow.com/questions/18248659
复制相似问题