Pythonでログインしてみました。ログインスタンスがスレッドによって作成されると、削除されないように見えます。ただし、私のプログラムは 1 分あたり 100 を超えるスレッドを生成する必要があり、それぞれが独自のロガーを作成するため、一種のメモリ リークが発生する可能性があります (logging.Logger
インスタンスはガベージ コレクターによって収集されません)。
マルチスレッドアプリケーションにロガーを使用する方法はありますか?
Pythonでログインしてみました。ログインスタンスがスレッドによって作成されると、削除されないように見えます。ただし、私のプログラムは 1 分あたり 100 を超えるスレッドを生成する必要があり、それぞれが独自のロガーを作成するため、一種のメモリ リークが発生する可能性があります (logging.Logger
インスタンスはガベージ コレクターによって収集されません)。
マルチスレッドアプリケーションにロガーを使用する方法はありますか?
Pythonlogging
モジュールでは、ロガーはlogging.Manager
インスタンスによって管理されます。通常、として使用できるロギングマネージャは1つだけですlogging.Logger.manager
。ロガーは名前で識別されます。この呼び出しを使用するたびに、ロガーのdictを保持し、毎回同じロガーを返すlogging.getLogger('name')
呼び出しが実際に転送されます。logging.Logger.manager.getLogger
'name'
したがって、スレッドからロガーを取得するときに別の名前を使用しない場合は、実際には毎回同じロガーインスタンスを使用しているため、メモリリークについて心配する必要はありません。