8

Python の Heroku で Web サイトを実行しており、Web ページの配信をブロックしたくないタスクを処理するためのバックグラウンド プロセスとしてワーカーを起動しているため、webdyno には不適切です。このために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_typeexc_value、 とはどのような種類のオブジェクトtracebackですか? (たとえば、行if exec_type == "MyCustomError"はまったく正しいですか?)
  • 私のエラー ハンドラーは、それが特定のエラーであるかどうかを効果的に検出し、10 回失敗するまでそれらのジョブを再キューに入れ、その後failed. 他のすべてのエラーも に落ちfailedますか?
4

3 に答える 3

-2

  1. 詳細については、sysのドキュメントを参照してください。
  2. False は例外の処理を停止することを意味し、True は続行してスタック上の次の例外ハンドラーにフォールスルーすることを意味します。

同じジョブの複数の例外ハンドラーは、type例外タイプ (クラス) です。コードを修正する必要があります。他のエラーは、rq ドキュメントにあるようにNone解釈されて返されます。True

于 2012-10-08T01:12:03.850 に答える