Python の Heroku で Web サイトを実行しており、Web ページの配信をブロックしたくないタスクを処理するためのバックグラウンド プロセスとしてワーカーを起動しているため、web
dyno には不適切です。このためにrq
、redis を使用してキューを設定しました。
私のプロセスでは、カスタム例外が発生することがあります。これらの特定のサブセットについては、ジョブを「失敗」キューに直接移動させるのではなく、数回再キューイングしたいと考えています。ホームページの例外ハンドラのページを見てきましたがrq
、いくつか不明な点があります。特に、例外ハンドラを記述する次の方法について説明します。
def my_handler(job, exc_type, exc_value, traceback):
# do custom things here
# for example, write the exception info to a DB
...
現在、私は次のようなことを計画しています。
from rq import requeue_job
def my_handler(job, exc_type, exc_value, traceback):
if exec_type == "MyCustomError":
job.meta['MyErrorCount'] += 1
job.save()
if job.meta['MyErrorCount'] >= 10:
return True
else:
requeue_job(job.id)
return False
質問:
exc_type
、exc_value
、 とはどのような種類のオブジェクトtraceback
ですか? (たとえば、行if exec_type == "MyCustomError"
はまったく正しいですか?)- 私のエラー ハンドラーは、それが特定のエラーであるかどうかを効果的に検出し、10 回失敗するまでそれらのジョブを再キューに入れ、その後
failed
. 他のすべてのエラーも に落ちfailed
ますか?