2014-01-17 53 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