RQジョブのタイムアウトをキャッチして、タイムアウト後に再キューイングできるようにするための良い方法を見つけようとしています。
基本的に、正しい解決策は、タイムアウトしたジョブを再キューイングする方法 (たとえば、ワーカー内の例外ハンドラーなど) を提供します。また、ジョブがキューに戻る場合も、それfailed
は良い答えです。
どうもありがとう!どんな助けでも大歓迎です!
例外処理を使用したいようです。ドキュメントから:
例外の発生により、ジョブが失敗する可能性があります。RQ ワーカーがバックグラウンドで実行されている場合、これらの例外についてどのように通知されますか?
デフォルト: 失敗したキュー RQ のデフォルトのセーフティ ネットは、失敗したキューです。実行に失敗したすべてのジョブは、その例外情報 (タイプ、値、トレースバック) とともにここに格納されます。これにより、失敗したジョブが「失われる」ことはありませんが、ジョブの失敗について積極的に通知を受けるには役に立ちません。
カスタム例外ハンドラ バージョン 0.3.1 以降、RQ はカスタム例外ハンドラの登録をサポートしています。これにより、デフォルトの動作 (失敗したキューにジョブを送信する) を完全に置き換えたり、例外が発生したときに追加の手順を実行したりできます。
time.time() + timeout
また、job_id をキーおよびスコアとして並べ替えられた redis セットにジョブを保存し、ワーカーを実行ZRANGEBYSCORE sorted_set 0 [current_time]
して、タイムアウト ジョブとして返されたものを処理することもできます。