初期化コストが高い共有リソースがあるため、システム全体でアクセスしたい(基本的に一部の計測に使用されるため、軽量である必要があります)。そこで、セットアップとアクセスを管理するモジュールを作成しました。リソースの遅延初期化を行い、モジュールのグローバル変数に保存します。次に、このモジュールの関数をシステム全体で使用して、リソースを操作します。
- 今、リソースを再初期化する必要があるかどうか (またはどのくらいの頻度で) を考えていますか?
- CPython ではオブジェクトが参照カウント 0 (またはその付近) でガベージ コレクションされることはわかっていますが、モジュールが現在実行されていなくても、参照としてカウントされるモジュールに格納されていますか?
コードの例: _connect() が遅いモジュールがあります。システム全体で report_safely() を使用し、最終的に _connect() をできるだけ呼び出さないようにしたいと考えています。
__metrics = None
def _connect():
global __metrics
client = SomeSlowToSetUpClient()
__metrics = SomeMetrics(client)
client.connect()
def report_safely():
if not __metrics:
_connect()
__metrics.execute_lightweight_code()