2010-08-20 78 views
8

可能重複:
How can I speed up fetching pages with urllib2 in python?檢索多個URL一次/並行

我有一個下載網頁中的python腳本,分析它,並從頁面返回一定的價值。爲了得到最終結果,我需要抓幾頁這樣的頁面。每頁檢索需要很長時間(5-10s),我寧願並行發出請求以減少等待時間。
問題是 - 哪種機制可以快速,正確地執行並且CPU /內存浪費最小?扭曲,異步,線程,別的東西?你能提供一些與例子的鏈接嗎?
謝謝

UPD:有幾個解決方案的問題,我正在尋找速度和資源之間的妥協。如果你可以講述一些經驗細節 - 從你的觀點來看它是如何快速加載的 - 這會非常有幫助。

+0

在這裏看到我的答案http://stackoverflow.com/questions/3491455 – 2010-08-20 13:26:58

回答

13

multiprocessing.Pool可以是一個很好的交易,有some useful examples。 例如,如果你有一個網址列表,你可以在一個並行的方式映射內容檢索:

def process_url(url): 
    # Do what you want 
    return what_you_want 

pool = multiprocessing.Pool(processes=4) # how much parallelism? 
pool.map(process_url, list_of_urls) 
+0

就像對其他人的警告,我不知道爲什麼,但在運行代碼的幾秒鐘內,它將我的系統帶到完全停止。 – Peter 2017-02-09 02:32:01

+0

是的,關於這個。告訴任何系統同時完成12億件事情可能會導致處理其他任務時出現輕微的延遲。大聲笑。 – 2017-11-23 01:28:38

3

multiprocessing

產卵一堆的流程,一個爲你想下載的每個URL。使用Queue來保存一個URL列表,並使這些進程從隊列中讀取一個URL,處理它並返回一個值。

1

使用異步,即事件驅動而不是阻止,聯網這個框架。一種選擇是use twisted。最近出現的另一種選擇是使用單片眼鏡。這個迷你框架隱藏了非阻塞操作的複雜性。見​​。它可以在幕後使用扭曲或龍捲風,但你並沒有真正注意到它。