2010-12-05 47 views
1

我正在開發波蘭博客圈監測網站,我正在尋找「最佳做法」與處理 海量的python內容下載。組織池爲多個網站海量下載

這裏是一個工作流的樣本sheme:

http://img577.imageshack.us/img577/2971/scheme.png

說明:

我已經分類的RSS源數據庫(1000左右)。每隔一小時左右我都應該檢查Feed是否有新的項目發佈。如果是這樣,我應該分析每個新項目。 分析過程處理每個文檔的元數據,並下載每個發現的圖像。的代碼

簡體一個線程版本:

for url, etag, l_mod in rss_urls: 
    rss_feed = process_rss(url, etag, l_mod) # Read url with last etag, l_mod values 
    if not rss: 
     continue 

    for new_item in rss_feed: # Iterate via *new* items in feed 
     element = fetch_content(new_item) # Direct https request, download HTML source 
     if not element: 
      continue 

     images = extract_images(element) 
     goodImages = [] 
     for img in images: 
      if img_qualify(img): # Download and analyze image if it could be used as a thumbnail 
       goodImages.append(img) 

所以我遍歷throught RSS提要,只下載新的項目源。從Feed中下載每個新的項目。下載並分析項目中的每個圖像。

HTTR請求出現在follwing階段: - 下載RSS XML文檔 - 下載訂閱RSS 發現X的項目 - 下載每個項目

我決定嘗試蟒蛇GEVENT的所有圖像(www.gevent .org)庫來處理多個網址內容下載

我想要獲得的結果: - 能夠限制外部http請求的數量 - 能夠下載所有列出的內容項目。

什麼是最好的方法來做到這一點?

我不確定,因爲我是新來的parralel編程(這個異步請求可能與parralel編程根本沒有關係),我不知道如何完成這樣的任務 成熟世界,然而。

我想到的唯一想法是使用以下技術: - 每45分鐘通過cronjob運行處理腳本 - 嘗試在開始時用寫入的pid進程鎖定文件。如果鎖定失敗,請檢查此pid的進程列表。如果找不到pid,可能在某個時候進程失敗,並且安全地打開新的進程。 - 通過gets pool運行任務的包裝器爲rss feeds下載,在每個階段(找到新的項目)添加新作業來quique下載項目,每下載一個項目添加圖像下載任務。 - 檢查當前正在運行的任務的幾秒鐘狀態,如果FIFO模式中有空閒插槽,則從quique運行新作業。

對我來說聽起來不錯,但也許這種任務有一些「最佳做法」,我現在正在重新發明輪子。 這就是爲什麼我在這裏發佈我的問題。

Thx!

回答