python urlopen以较慢的互联网打开更快?

时间:2014-10-30 21:14:50

标签: python urllib

我正在尝试制作一个能够从网站上读取网页的程序。要读取的数据仅为18kb。我有一个大学的wifi连接,速度非常快(2 mbps)并且有一个代理服务器正在运行。

当我尝试运行代码时:

import urllib
data=urllib.urlopen("http://www.google.com")

运行大约需要8到10秒(同样的链接在网络浏览器中打开得非常快)

然而,当我在其他互联网连接上运行相同的代码时,这个代码并不像大学的wifi那么快,代码会在不到一秒的时间内运行。

我很困惑,为什么它在wifi上速度较慢。这是因为代理服务器吗?但如果是因为这个原因,为什么同一个链接在浏览器中打开的时间会减少。

提前致谢

2 个答案:

答案 0 :(得分:0)

答:因为缓存页面

作为一项常见功能,webBrowsers在他们自己的+校园基础设施(作为周边传输减少策略)可能会受益于缓存页面存储,因此不会等待与远程服务器页面相关的端到端传输延迟 - 描述检索。

与从远程服务器页面完全重新加载页面相比,缓存页面立即加载

以下关于删除缓存网页的评论:

虽然用户能够发布localhost缓存,但答案是讨论基于基础架构的缓存的园区/ ISP实践,这可以减少访问/骨干网络的整体流量,并且不受最终用户控制。< / p>

修改OP后,要包含明确的网址目标:

添加了您的测试与www.google.com的http发起的会话相反,您应该查看前向滚动的事务,这些事件恰好在本指令的“幕后”开始。 DNS解析(如果没有缓存)在browser / python中需要相同的时间,重定向握手,加密服务导入,加密密钥交换握手以及设置http S 所需的其他导入/处理-session是下一个隐藏的步骤,作为通用语言解释器的python必须导入/处理ad-hoc,而浏览器已经准备好作为专用软件继续进行。如果使用分析器(来自处理侧跟踪/定时)和/或网络嗅探器(来自传输侧跟踪/定时),您会看到更多详细信息。

答案 1 :(得分:0)

下载18kb文件并不能代表您的互联网连接速度。由于文件较小,我们一直在寻找有效的延迟。

启动urllib.urlopen("http://www.google.com")将在幕后进行大量操作。举几个例子:

  • 它会请求DNS将www.google.com转换为IP
  • 也许谷歌可以重定向您,例如HTTPS
  • 您和服务器之间的任何节点都可以在请求时间(代理,QoS)中播放

但是,为了解决您的问题,我建议您使用traceroute(ICMP)和traceproto来查看您,Google和两者之间的每个节点之间的延迟。例如:

$ traceroute google.com
traceroute to google.com (173.194.40.135), 30 hops max, 60 byte packets
 1  par10s10-in-f7.1e100.net (173.194.40.135)  18.142 ms  18.116 ms  18.111 ms

但请注意,在网络通信中,您必须关注OSI model

的所有元素