2014-10-30 91 views
0

我正在處理一個python腳本,它在包含.mp3文件的URL列表上進行迭代;目標是通過請求庫,通過頭部請求從每個網址提取內容長度。 但是,我注意到頭部要求顯着減慢劇本;隔離所涉及的一段代碼,我,得到1.5分鐘(200個網址/請求)執行的時間:http頭請求減慢腳本(python請求)

import requests 
import time 

print("start\n\n") 

t1 = time.time() 

for n in range(200): 
    response = requests.head("url.mp3") 
    print(response,"\n") 

t2 = time.time() 

print("\n\nend\n\n") 
print("time: ",t2-t1,"s") 
+0

那麼,有什麼問題嗎? – 2014-10-30 18:19:38

+0

問題是執行所需的時間。我正在開發一個已經存在的應用程序,它具有幾乎相同的工作方式(我可以閱讀它的源代碼,並且我正在吸取靈感),但是要做同樣的事情需要幾秒鐘的時間。 – 5haffl 2014-10-30 19:13:10

+0

您可能想要使用某種形式的並行(多線程/多處理)來同時發出多個網絡請求,或者在非阻塞IO上使用表單(例如使用gevent或類似的東西)。 – 2014-10-30 22:44:09

回答

0

你一個很好的解決方案可能是grequests

import grequests 

requests = (grequests.get('http://127.0.0.1/%i.mp3' % i) for u in range(200)) 

for code grequests.map(rs): 
    print 'Status code %i' % code.status_code 
+1

非常感謝。 – 5haffl 2015-07-13 19:40:03