2014-01-17 187 views
4

有没有一种方法可以提高Python下载速度?python下载速度非常慢

我有一个程序,我在VB6中写道,不用尝试就抽出Python。我把这个东西转换过来了,现在我正在尝试它,Python(linux)中的东西似乎慢了两倍。即使是该程序的初始版本,似乎花费的时间也超过了我在Windows上使用它的时间。

我试过使用urllib(2.7),urllib.request(3.3)和requests。目前我正在尝试urllib3,它也没有更快。在Windows上通常需要45分钟的时间看起来好像在Linux上需要接近2小时才能在同一台互联网连接上的同一台计算机上完成相同的任务。这项任务只是搜索互联网和下载文件,当搜索找到它正在寻找什么......只是一个潜在的文件名称的跨度。

我也会问,因为它已经发生了不止一次,今天下午到目前为止,我该如何检测110错误代码(连接超时)。我在下面使用的是不起作用,它仍然杀死了该程序。

import urllib3 

http = urllib3.PoolManager() 

def dl_10(self): 
     self.NxtNum10 = int(self.HiStr10) 
     while self.NxtNum10 < int(self.HiStr10)+9999: 
       url = 'http://www.example.com/videos/encoded/'+str(self.NxtNum10)+'.mp4' 
       r = http.request('GET', url) 
       if r.status==404: 
         self.NxtNum10 +=1 
         continue 
       elif r.status==110: 
         continue 
       else: 
         urllib.request.urlretrieve(url,str(self.NxtNum10)+'_1.mp4') 
         statinfo = os.stat(str(self.NxtNum10)+'_1.mp4') 
         if statinfo.st_size<10000: 
           os.remove(str(self.NxtNum10)+'_1.mp4') 
         else: 
           self.End10 = self.NxtNum10 
       self.NxtNum10 +=1 

     self.counter +=1 
     self.NxtNum10 = 'FINISHED' 

这是通过线程运行,我不认为这应该有任何区别。就像我说的那样,使用urllib(2.7)进行初始写入也很慢,而且没有使用线程,我只是像在Windows上一样运行程序10次。

有没有更快的方法从Python上抓取东西?

+1

你说的是总时间,或个人时间?它看起来像你顺序下载,而不是并行下载。 – Keith

+0

我有10个单独的threecks依次通过10,000个文件。 Windows上的每个程序(VB6)通常需要45-50分钟才能完成一个完整周期(所有10个程序一次运行)。在linux/Python一小时内,我只能通过每个线程超过3000个文件。因此,为什么我对速度的缺乏感到震惊。唯一改变的是Windows到Linux和VB6到Python。其他一切都是一样的。我昨天晚上要在Windows上试用Python。我厌倦了试图安装模块并放弃。 Linux对于使用Python来说是FAR优越的。 – confused

+0

是的,我可以从你的风格看到你更熟悉VB。 ;)我不知道从这里发生了什么,但你可以尝试pycurl(python wrapper for libcurl)。 – Keith

回答

3

我发现的,而不是直接使用urlretrieve,使用下面的方法是更加更快:

resp = urllib2.urlopen(url) 
respHtml = resp.read() 
binfile = open(filename, "wb") 
binfile.write(respHtml) 
binfile.close() 

写入文件directly.Hope它可以帮助

+0

太快了!!!!!!我不敢相信!哇~~~ – partida