Djangoのデータベース接続の問題

プロジェクトを実行するマルチスレッド。Nワーカースレッドの数は、DBからのジョブを取得し、その結果をDBに書き戻されるがあります。

プロジェクトはいくつかの時間のために実行されている場合は、データベース接続が枯渇していることがわかったが、幸い良いメモリ、その後、8,000以上の接続の最後の数を高めることとなっています。接続数を枯渇すると、このエラーのようなPostgreSQLが発生します。

FATAL:残りの接続スロットは非スーパーユーザ接続のレプリケーションがために予約されている

、おそらく知識であるので、2つのポイント:
Webプロジェクト場合は1、とき要求、ジャンゴの終わり私は、接続を閉じるようになります。はい、何も接続プールがありません。
2.私たちは、非Webプロジェクトであるため、要求イベントの最後には存在しないので、彼らは接続を閉じなかったので。しかし実際には、これは詠唱によって閉鎖されていないため、問題が発生することはありませんが、問題がどこにあるかわからない、漏れ接続があるだろう、接続データが常に成長します。

最終溶液は、タスクの完了後、つまり、私たちのプロジェクトに固有の、データベース接続をクローズするためのイニシアチブをとるための時間を見つけるために、各ワーカースレッドで、それに関連する接続を置く我々はThreadPoolExecutorを使用しているので、Djangoは、これを行うことは容易であるので、オフポイント。
コードは次のとおりです。
django.dbインポート接続から
DEFのon_done(フューチャー):
    connections.close_all()
DEFメイン():
    キュータAS ThreadPoolExecutor()を持つ:
        しばらく真:
            フューチャーexecutor.submit =(DO、get_a_job())
            future.add_done_callback(on_done)

関係するその他の技術情報:gzitcast

おすすめ

転載: www.cnblogs.com/heimaguangzhou/p/11646781.html
おすすめ