私は複数のワーカーを実行するセットアップで遅延ジョブを使用しています。私の質問のために、それは本当に重要ではありませんが、私は10人の労働者を実行しているとしましょう(現時点で開発モードでこれを行っています)。同じジョブを開始する複数の遅延ジョブプロセス
私が抱えている問題は、2人の異なる労働者が同じジョブで作業を開始し、自分のジョブオブジェクトでperformメソッドを呼び出すことがあることです。
Delayed Jobは、これを防ぐために悲観的なロックを使用していますが、最初の作業者が実際にロックするまでにロックをかける時間があるようです。
他の誰かがこの問題を経験しているのか、それとも私の設定が間違っているのか確認するだけです。私はPostrgresを使っています。これは私の開発マシンと私がホストしているHerokuの両方で起こります。
私は自分の仕事の中でそれを回避しようとしますが、これはまだ起こりますが少し問題です。理想的には、遅れた仕事が2つのプロセスから同じ仕事に働くことは決して起こりません。
ありがとうございます!
私は似たようなものを見ます。それを完全に追跡することはできませんでしたが、ロックのチェックとロックの間に、複数のワーカーがジョブをつかんで実行しているようです。 –
私はイニシャライザで '' Delayed :: Worker.read_ahead = 1''を設定すると問題を緩和したようです。 –
Resqueで同じ問題がありましたが解決策が見つかりませんでした –