メインのアプリケーションに使用しているのと同じ Postgres DB である、Redis ブローカーと Database Results バックエンドを使用して Django Celery を実行しています。
最近、Postgres サーバーが再起動され、ワーカー プロセスが DB 接続を失う状況に遭遇しました。これが発生した後、DB が戻ってメインの Django サイトが正常に応答していても、セロリのタスクは再び成功しません。何かが処理される前に、celeryd プロセスを再起動する必要があります。すべてのセロリ タスクで同じエラーが報告されます。
DatabaseError: terminating connection due to administrator command
SSL connection has been closed unexpectedly
db 結果バックエンドを使用すると Celery が失敗を報告できないため、外部的にはそれらのタスクが実行されていないように見えることを理解していますが、後続のタスクが失敗する理由がわかりません。Celery のドキュメントによると、タスク間の DB 接続は保持されないため、新しいタスクは新しい接続を確立する必要があります。
では、なぜこれが起こるのでしょうか?データベース接続の下位レベルの永続性はありますか? セロリにこれらのタスクを再試行させるにはどうすればよいですか?