2017-12-21 18 views
0

私は複数のウェブサイトからデータをスクラップするいくつかのスクリプトを持っています。次のステップはデータを処理することです。データを受け取り、データを処理するワーカーをセットアップしたいと思います。 1人の作業者が常に稼働し、スクレーパが処理するデータを供給するのを待っている良いパイプライン/ワークフローのアプローチは何ですか?複数のプロセスでアクセス可能な優れたパイプライン?

私はリクエストを処理するAPIサーバーのように思っていましたが、より良い解決策がありますか?それらはすべて同じマシン上で実行されている場合は

、スクレーパと労働者を使用すると、標準ライブラリにmultiprocessing.Queueを使用することができ、同じプロセスによって開始されています

答えて

1

は、詳細がなければ、私は唯一の一般的な勧告を与えることができます。それは非常に単純なワークフローのために働くはずです。

柔軟性を高めるために、メッセージングライブラリを使用してプロセス間で通信します。私はZeroMQが好きですが、他にもあります。

ZeroMQは、ローカルプロセス間転送とネットワーク転送の両方をサポートしています。ほとんどのコード変更で転送タイプを変更できます。 multiprocessing.Queueで始めると、別のマシンでワーカーを実行したい場合は、たくさんのコードを書き直す必要があります。

スクレーパーとワーカーはお互いに直接話すことができます(PUSH/PULLパターン)、またはそれらの間にブローカー/キューを持つことができます。

常に1人の作業者しかいない場合は、PUSH-PULLで十分ですが、それ以上あればキューが必要です。

プッシュ/プル:各スクレーパーが作業者に話しかけて作業を送信します。スクレーパーは、作業のために各スクレーパーをポーリングする必要があります。

キュー:スクレイパーがタスクをキューに送信します。作業者は、作業のために待ち行列に問い合わせる。

PUSH/PULLは少しシンプルですが、作業者が各スクレーパーを認識して接続する必要があることを意味します。ワークフローが複雑な場合は面倒です。

キューでは、スクレイパーとワーカーはキューについて知る必要があるだけで、セントラルブローカーとして機能します。

http://learning-0mq-with-pyzmq.readthedocs.io/en/latest/pyzmq/patterns/pushpull.html

http://learning-0mq-with-pyzmq.readthedocs.io/en/latest/pyzmq/devices/queue.html

+0

PUSH/PULLは私が感謝を探しています正確に何です。スクレーパーは結果を待つ必要がないので、作業者は結果をストリームにプッシュしてさらに処理してデータベースに格納します。ありがとう。 –

関連する問題