2

要求で指定された特定の Django オブジェクトでアクションを実行するジョブを受け取る pika lib を使用して、2 つの RabbitMQ ワーカーを持つ Python Django プロジェクトがあります。

問題は、ワーカー A と B が同じ Django オブジェクト x に対して同時にアクションを実行しないようにすることです。問題が発生する可能性があるからです。どちらのワーカーが最初に実行されるかは問題ではありませんが、A が x で作業していて、B が x で作業するジョブを受け取った場合、A が完了するまでこのジョブを待機させたいと考えています。

つまり、問題は、他のワーカーが何に取り組んでいるかを知ることができ、特定の時間までジョブを一時停止できることに要約されます。私の実際のプロジェクトでは、これを適用する必要があるワーカーが 2 つ以上あることに注意してください。この例では、分析しやすくするために 2 つを選択します。

助けてくれてありがとう、マティアス

4

1 に答える 1

1

おそらくデータベースに基づいて、何らかのロックメカニズムを使用する必要があります。

  1. ワーカーが django オブジェクトで作業しているとき、データベースで作業をマークします。MySQL の例:

    worker_id | object_id | task_type 22 44 3 // 作業をマークするために挿入されるエントリ

  2. 別のワーカーが django オブジェクトをピックアップすると、#1 のようにマークされていないことを確認し、次のアイテムのピックアップに進みます。

  3. ワーカーがオブジェクトの作業を終了すると、データベース ロック行は削除されるか、FINISHED としてマークされます。

于 2013-11-20T12:12:09.543 に答える