0

私はdelayed_jobを使用して、ほぼすべて一度に多数のジョブを作成し、後で実行します。ジョブの数が多すぎると、一定の時間が経過すると、関係なくすべてのジョブがキューからクリアされますその状態の。

次の Rails プロジェクトは、この問題を示しています: https://github.com/hayksaakian/taskbreaker

問題を再現するには、いくつかのタスク (5 ~ 15 など) を作成し、それぞれに (Web インターフェイスまたはコンソールから) 約 100 の目標を設定します。

次に、コンソールでこれらのタスクを実行しようとします: Task.attempt_tasks

何が起こるかは次のとおりです: 多くのジョブが作成され、ワー​​カーは数分間自分の仕事を行い、その後、すべてのジョブがキューから消えます。

これが事実であることを確認するには、任意のタスクを確認してください。各実績の任意の番号が「10」に等しくない場合があることに気付くでしょう (遅延の各試行文字列呼び出しに対して 1 ずつインクリメントしているため、10 である必要があります)。各実績の任意の配列の長さも 10 ではありません (attempt_array の呼び出しを 10 回遅らせたことを考えると、10 の長さになるはずです)。

エラーが表示されていないため、なぜこれが起こっているのかわかりませんが、起こっていることは確かです。

taskbreaker.herokuapp.com で悪い作業の例を参照してください。

それが助けになるなら、私はherokuでホストしていることに注意してください。また、妥当な時間内に問題を再現するには、少なくとも 5 人のワーカーが必要です。

4

1 に答える 1

0

これは競合状態が原因でした。メソッドが同時に発生していたため、読み取りと書き込みが重複しており、予期しない出力が発生していました。

于 2012-11-28T21:18:55.760 に答える