2013-09-05 12 views
7

RQジョブのタイムアウトをキャッチする良い方法を見つけようとしているので、タイムアウト後に再キューできる。PythonでRQタイムアウトを正しく捕まえて処理するには?

基本的には、正しい解決策は、タイムアウトしたジョブを再キューする方法(たとえば、ワーカー内の例外ハンドラなど)を提供します。また、ジョブがfailedキューに戻った場合でも、それは良い答えです。

ありがとうございました!どんな助けもありがとう!

答えて

3

exception handlingのような音がします。ドキュメントから:

例外が発生したためにジョブが失敗することがあります。あなたのRQワーカーが のバックグラウンドで実行されている場合、どのようにこれらの例外を通知されますか?

デフォルト:失敗したキューRQのデフォルトセーフティネットは、失敗した キューです。実行に失敗したすべてのジョブは、例外情報(タイプ、値、トレースバック) と共にここに格納されます。これにより、 は失敗したジョブが「失われる」ことはありませんが、 はジョブの失敗を事前に通知するために使用されません。

カスタム例外ハンドラバージョン0.3.1から、RQは カスタム例外ハンドラの登録をサポートしています。これにより、 のデフォルトの動作(失敗したキューにジョブを送信する)が完全に置き換えられるか、または例外が発生したときに追加の手順を実行することが可能になります。あなたはRedisの中で仕事をも格納することができ

は、キーとスコアなどtime.time() + timeoutとしてJOB_IDで設定し、労働者の実行ZRANGEBYSCORE sorted_set 0 [current_time]とタイムアウトしたジョブとして返されるどんなプロセスを持っているソート。

+2

ありがとうございます!これは正しいです。将来参照するために、ジョブはワーカー例外ハンドラで処理できる 'JobTimeoutException'を発生させますが、定義することを選択します。 –

関連する問題