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