2010-12-05 2 views
1

私はブログの監視ポージングウェブサイトを開発しています。私は という大量のコンテンツをPythonでダウンロードして処理する "ベストプラクティス"を探しています。私はRSSフィード(約1000)のデータベースを分類しました複数のURLのためのプールを大量にダウンロードする

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

説明:ここでは

は、ワークフローのサンプルshemeです。 1時間ごとに新しいアイテムが投稿されている場合は、フィードをチェックする必要があります。もしそうなら、私はそれぞれの新しい項目を分析すべきです。 Analyzeプロセスは各ドキュメントのメタデータを処理し、内部にあるすべてのイメージもダウンロードします。コードの

簡体1スレッドのバージョン:

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) 

は、だから私は、RSSフィードthroughtダウンロードを繰り返すだけで、新たなアイテムを供給します。各のアイテムをフィードからダウンロードします。アイテムの各イメージをダウンロードして分析します。

HTTRの要求がfollwing段階で表示されます。 - ダウンロードRSS XMLドキュメント - 私はPythonのgeventを試すことにしました

各項目のすべての画像をダウンロードする(www.gevent - RSS で見つかったのx項目をダウンロード.org)ライブラリを使用して複数のURLのコンテンツをダウンロードする

結果として得たいもの: - 外部HTTPリクエストの数を制限する機能 - リストされたすべてのコンテンツアイテムをパラレルにダウンロードする機能。

これを行うにはどうすればよいですか?

私はparralelプログラミングにはまったく新しい(よくこの非同期要求はおそらくparralelプログラミングとは関係ありません)ので、私は確信していません。どのようにこのようなタスク が成熟したまだ、世界。 - 45分ごとにcronjobで処理スクリプトを実行します。 - 内側に書かれたpidプロセスでファイルをロックするようにしてください。ロックに失敗した場合は、このPIDのプロセスリストを確認してください。 pidが見つからない場合、おそらくプロセスはある時点で失敗し、新しいものをsrartするのが安全です。 - gevent poolのタスクを実行するためのラッパーを経由して、RSSフィードをダウンロードし、各段階で(新しい項目が見つかりました)アイテムをダウンロードするために新しい仕事を追加し、ダウンロードされたすべての項目で画像ダウンロードのタスクを追加します。 - FIFOモードで使用可能な空きスロットがある場合、キューレンジから新しいジョブを実行して、数秒ごとにジョブの状態を確認します。

サウンド私にとってはOKですが、この種のタスクには「ベストプラクティス」があり、私は今やホイールを再発明しています。 なぜ私はここに私の質問を掲示しています。

Thx!

答えて

関連する問題