3

次のことを行う cron ジョブを構築しています。
1. DB からレコードを取得します
。 2. レコードごとに、API への curl リクエストを起動します。(リクエストによっては迅速なものもあれば、大きな画像や動画をアップロードするものもあります)。
3. リクエストが成功しない場合は、わずかに異なるパラメーター (引き続きレコードに基づく) を使用して新しいリクエストを作成し、再度送信します。これは数回発生する可能性があります。
4. 要求が成功したら、DB の選択/挿入を実行します (この要求を送信する原因となった元のレコードに基づいて)。

リクエストの送信は、数分かかるもの (大規模なアップロード) と非常に速いものがあるため、並行して行う必要があります。

これを行うには何が最も適切でしょうか? DB からレコードを取得し、API の呼び出しと応答の解析を処理するための各レコードのプロセスを作成するマスター スクリプトを使用しますか? または、curl_multi を使用して、同じスクリプトから同時に複数の要求を送信し、返されるたびにそれぞれを解析しますか?

複数のプロセスを使用する場合、これを行うための最良の方法は何ですか? PCNTRL、popen など?
curl_multi を使用している場合、どの DB レコードがどの戻り要求に対応するかをどのように知ることができますか?

編集:カールマルチを使用している場合、おそらくこのテクニックを使用します: http ://www.onlineaspect.com/2009/01/26/how-to-use-curl_multi-without-blocking/
応答の処理を開始する前に、すべての要求を完了する必要があります。

ありがとう!

4

2 に答える 2

1

最後に、PCNTRL を使用してマルチプロセッシングを使用しました (同時プロセスの数を制限して)。curl_multi は何千ものリクエストに対応できないように思えました。

于 2011-10-27T12:22:42.090 に答える
1

大規模なデータセットを処理すると、同様の問題が発生しました。

私にとって最も簡単な答えは、4 つの個別のスクリプトを作成することでした。それぞれが関連する db 列の特定の 4分の 1 を取得し、私の場合は処理を行い、あなたの場合は curl リクエストを実行します。これにより、プロセスの 1 つに対する大きな要求が他のプロセスをロックするのを防ぐことができます。

対照的に、curl_multi を使用する 1 つのスクリプトは依然として大きなリクエストでロックされ、一度に複数をキューに入れることができます。

代わりに、マルチスレッドをネイティブにサポートする言語でこれを書くのが最適です。これにより、ハックに頼ることなく同時に物事を行うことができますが、それが常にオプションであるとは限りません。

于 2011-10-21T05:21:06.227 に答える