2017-05-30 4 views
1

JSONをたくさんダウンロードするスクリプトがあります。 JSONがダウンロードされた後、JSONを処理していて、他の機能にそれらを送信しています。現在、私はすべてのJSONがダウンロードされ、それぞれのJSONが処理されるまで待っています。これを並行して行う方法はありますか?同様に、各JSONがダウンロードされるとすぐに移動して、いくつかのタスクを実行します。ダウンロードしたファイルをすぐに処理します。

JSONが完全にダウンロードされた後、コンシューマにJSONのパスを送信するRabbitMQを使用することを考えています。私は、JSONがダウンロードされ、それを使用する準備ができているかどうかを判断する方法を知りません。

私は他の回答を見ましたが、何も分かりませんでした。私は、同時実行性の部分を続ける方法や、ダウンロードしたJSONを次のプロセスに引き継ぐ方法について考えたいだけです。

+0

'threading'と' Queue'モジュールの組み合わせを試すことができます。できるだけ早くリクエストを行い、キューに入れ、ダウンロードしてください。 – brunormoreira

+0

ありがとう、私はしようとします。しかし、JSONがダウンロードプロセスに入っている可能性はありますか?私はそれを処理しないように完全にダウンロードされたものとどのように区別するのですか? – Manohar

+0

さて、私はあなたがリクエストをどのように実装したのか分かりません。しかし、私はあなたの最適化のスキルに依存して、それぞれのためのダウンロードとスタートスレッドのためのURLを持つリストを作成するか、またはいくつかに参加します。その後、 'Queue'のサイズをチェックし続けて、ゼロより大きい値をダウンロードすることができます。理解していますか? – brunormoreira

答えて

1

何らかのメッセージキューを使用すると、この問題に完全に対処でき、JSONのダウンロードとJSONの処理を切り離すことができます。このセットアップで

[download] -> [MQ] -> [process] -> ??

各[]別のプロセスを表すであろうと - >プロセス間のデータのいくつかの並べ替えを送信表します。

ダウンロードスクリプトは、各ファイルをクラウドファイルストレージサービスに保存し、ダウンロードが完了したらそのファイルの場所を含むメッセージを公開するように変更できます。

メッセージキューから読み取り、ファイルを処理するコンシューマプロセスが存在する可能性があります。

これにより、ダウンロード時に各ファイルを処理することができます。さらに、ダウンロードとプロセスステップを個別に拡張することができます。

このパターンは非常に一般的ですが、操作の複雑さが伴います。 3つのプロセスを個別に管理する必要があります。

あなたは、2つの別々のプロセス持つことによって局部的に同じパターンを適用することができ、単一のマシン上でこれを実行したい場合:

  • を[ダウンロード] - [process_json]
  • を標準出力に書き込みますが - からの読み込みstdinとは

が、あなたはOSのパイプを使用してそれらをリンクできJSONを処理download.py | process_json.py

download.pyファイルをダウンロードしてファイルパスを書き込む。 process_jsonは単一のファイルパス上で動作します。

+0

うわー。ありがとう、トン!しかし、どのJSONを標準出力するのかをdownload.pyがどのように知っていますか?私は、JSONが完全にダウンロードされたので、download.pyがそれを標準出力できることをどのように知っていますか? 私のダウンロードスクリプト[シェルスクリプト]は、すべてのJSONを1つのコマンドでダウンロードするだけなので、完全にダウンロードされた後にそれぞれを取る方法をちょっと混乱させています。 – Manohar

+0

私は実際にこれを試しています。JSONがダウンロードされているフォルダ(JSONがダウンロードされているフォルダ)をチェックし、JSONファイルの数が「最後に変更されました」を1秒以上確認するスレッドを作成します私は、ファイルが完全にダウンロードされたことを前提として、さらなる処理に送ることができます。 – Manohar

+0

@Manoharどのようにスクリプト内のファイルをダウンロードしていますか?ダウンロードが完全に完了したか、またはそれを中断した何か例外的なものがあったかどうかをスクリプトから伝える方法があるはずです。 – dm03514

関連する問題