要求/応答サイクル中に変更されることはないが、数百回 (場合によっては数千回) 呼び出されるデータベースの値に対して、インメモリ スレッド ローカル キャッシュを使用したいと考えています。私の限られた理解は、「グローバル」/モジュール変数を使用することが、このタイプのキャッシュを実装する 1 つの方法であるということです。
例えば:
#somefile.py
foo = None
def get_foo(request):
global foo
if not foo:
foo = get_foo_from_db(request.blah)
return foo
このタイプの「グローバル」を使用することがPythonでスレッドセーフであるかどうか疑問に思っているため、djangoでget_foo_from_db()が要求/応答サイクルごとに1回だけ呼び出されることに満足できます(runserverまたはgunicorn + geventのいずれかを使用) )。私の理解は正しいですか?このことは十分に呼び出されるため、memcached を使用して値を保存することさえボトルネックになります (私が話している間、私はそれをプロファイリングしています)。