OK、それほど単純ではないことはわかっています。私のsettings.pyで2つのdb接続が定義されています:default
とcache
. DatabaseCache
のバックエンドを使用していdjango.core.cache
ます。モデルとキャッシュに別々のデータベース/スキーマ/テーブルを使用できるように、データベース ルーターを定義しました。完全!
現在、キャッシュ DB が利用できない場合があり、次の 2 つのケースがあります。
DB がクラッシュしたとき、データベースへの接続はすでに確立されていました - これは簡単です - 私はこのレシピを使用できます: http://code.activestate.com/recipes/576780-timeout-for-nearly-any-callable/ :
try: timelimited(TIMEOUT, self._meta.cache.get, cache_key)) expect TimeLimitExprired: # live without cache
データベースへの接続がまだ確立されていないため
timelimited
、実際にデータベース接続を確立するコードの一部をラップする必要があります。しかし、そのようなコードがどこに存在し、それを選択的にラップする方法がわかりません(つまり、接続のみをラップし、タイムアウトなしでcache
接続を残します)default
ポイント2のやり方を知っていますか?
この回答https://stackoverflow.com/a/1084571/940208は正しくないことに注意してください。
grep -R "connect_timeout" /usr/local/lib/python2.7/dist-packages/django/db
結果が得られず、cx_Oracle ドライバーは、私の知る限り、このパラメーターをサポートしていません。