TheSchwartz の prioritize を有効にしたときの挙動は愉快
ワーカー使っていると、一部のジョブだけちょっと優先的に実行したいということがあるので、TheSchwartz の場合、prioritize => 1 にしてプライオリティを有効にするとよいのですが、挙動でハマったのでメモをしておきます。
今回のケース
そもそもジョブごとにプライオリティはつけていないが、一部のジョブだけ手動対応で優先して処理を行いたくなった。
やったこと
該当ジョブを
update job set run_after = insert_time, grabbed_until = insert_time, priority = 1 where ...;
で優先順位を設定しすぐに実行開始できるようにした
結果
_人人人人人人人人人人人人_ > なかなか実行されない <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
というのも、TheSchwartz は priority 順でソートして50件取得して、それをシャッフルしてから1件選んで実行する、という挙動をするため。
つまり、優先順位を設定したとしても有象無象と混ぜられた 1/50 のクジに当たらなければ、そのジョブは実行されない。1/50 って2%だよ…… 2%…… 100回ジョブ実行しようとしてようやく86.7%の確率だよ……
どうするか?
とにかく入ってるジョブをすぐ実行したい場合
- $TheSchwartz::FIND_JOB_BATCH_SIZE (デフォルト50) を 1 にする
- 該当ジョブ以外の run_after を適当に未来に設定する
- ジョブIDを指定して1回だけワークするスクリプト書いて手動実行
ぐらいしかない。
関連エントリー
- Illustrator で作った .ai ファイルをファイルサイズを減らした .pdf に もちろん Illustrator を起動してエクスポートなり別名で保存なりすればいいのだけれど、複数ファイルを頻繁にコンバートしたいときやは...
- Rock64 を買って golang で赤外線受信を試してみた Rock64 http://akizukidenshi.com/catalog/g/gM-12382/ というのを買ってみた。 とりあえず ...
- RNN/LSTM/GRU の入力と stateful 化 (keras) 入力データ (batch_size, timesteps, features) が入力になる。batch_size はこのバッチ(学習・予測...
- NiZ Keyboard PLUM からキーマップや打鍵回数を読み出す NiZ のアプリケーションは Windows 向けしかない。プロトコルが気になったので、とりあえず打鍵回数を読み出すところをまでをやってみた...
- Spring MVC で @Async と @RequestScope を共存させるには? @Async と @RequestScope を同時につかうとどうなるか @RequestScope、これは @Scope(value = ...
