WSGI アプリケーションでRQを使用しています。私たちが行っていることは、タスクを実行するさまざまなバックエンド サーバーにいくつかの異なるプロセスを配置し、(場合によっては) いくつかの異なるタスク サーバーに接続することです。このセットアップをより適切に構成するために、システムでカスタム管理レイヤーを使用して、ワーカーの実行、タスク キューのセットアップなどを処理します。
ジョブが失敗した場合、再試行を実装したいと考えています。これは、遅延が増加した後にジョブを数回再試行し、最終的にジョブを完了するか失敗させて、ログ システムにエラー エントリを記録します。ただし、これをどのように実装する必要があるかはわかりません。データベースにエラーを記録できるようにするカスタム ワーカー スクリプトを既に作成しており、最初の再試行の試みは次のようなものでした。
# This handler would ideally wait some time, then requeue the job.
def worker_retry_handler(job, exc_type, exc_value, tb):
print 'Doing retry handler.'
current_retry = job.meta[attr.retry] or 2
if current_retry >= 129600:
log_error_message('Job catastrophic failure.', ...)
else:
current_retry *= 2
log_retry_notification(current_retry)
job.meta[attr.retry] = current_retry
job.save()
time.sleep(current_retry)
job.perform()
return False
前述したように、ワーカー ファイルには、接続先のサーバーを正しく解決し、ジョブを投稿できる関数もあります。問題は必ずしもジョブを発行する方法ではなく、例外ハンドラーで取得したジョブ インスタンスをどうするかです。
どんな助けでも大歓迎です。これを行うためのより良い方法に関する提案や指針があれば、それも素晴らしいでしょう. ありがとう!