首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >urllib.urlretrieve对urllib.urlopen的速度

urllib.urlretrieve对urllib.urlopen的速度
EN

Stack Overflow用户
提问于 2013-11-21 00:30:28
回答 1查看 4K关注 0票数 2

我正试图直接从SEC ftp服务器下载SEC文件。当我使用urllib.urlretrieve(url,dst)时,它所用的时间比page = urllib.urlopen(url).read()writeFile.write(page)这样的操作要长得多。例如:

代码语言:javascript
复制
from time import time
import urllib
url = 'ftp://ftp.sec.gov/edgar/data/886475/0001019056-13-000804.txt'

t0 = time()
urllib.urlretrieve(url,'D:/temp.txt')
t1 = time()
t = t1-t0
print "urllib.urlretrieve time = %s" % t


t0 = time()
writefile = open('D:/temp2.txt','w')
page = urllib.urlopen(url).read()
writefile.write(page)
writefile.close()
t1 = time()
t = t1-t0
print "urllib.urlopen time = %s" % t

当我运行这个程序时,urllib.urlretrieveurllib.urlopen块分别得到33秒和2.6秒。如果我看D驱动器,整个~5.6MB的下载速度非常快,但它挂起大约30秒。这里发生什么事情?我可以使用urllib.urlopen方法继续我的项目,但是我想知道未来的项目。我正在运行Windows 7专业64位,这是Python2.7。提前谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2013-11-21 01:21:32

时间是一件有趣的事情,特别是考虑到网络的无状态环境。

虽然我没有冒烟的枪,但我建议你看看urllib的来源 (从2.7岁起)。

您可以在第69行:def urlopen和第87行:def urlretrieve看到。两者都创建了一个FancyURLopener(),但都在类中调用了单独的函数。

我最好的猜测是,拖延要么是围绕着:

  1. Windows文件处理程序、打开、关闭等。
  2. DNS解析(不太可能,因为文件解析和下载的时间为5.6秒,正如您所声称的那样。

您可以随时黑入您的urllib.py源代码,以打印每个子函数调用的时间,即使只是暂时跟踪挂起。若要定位安装存储urllib.py的位置,请使用以下命令:

代码语言:javascript
复制
import urllib
print urllib.__file__
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20110090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档