私はしばらくの間、マルチプロセッシングのロギングに苦労してきましたが、それには多くの理由があります。
私の理由の 1 つは、なぜ別の get_logger.
もちろん、私はこの質問を見てきましたが、 multiprocessing.get_logger が返すロガーは、ロギング処理をスムーズにするために「プロセス共有ロック」の魔法を行っているようです。
そこで、今日、Python 2.7 のマルチプロセッシング コード (/multiprocessing/util.py) を調べたところ、このロガーは単純な logging.Logger であり、魔法のようなものはほとんどないことがわかりました。
get_logger 関数の直前の Python ドキュメントの説明は次のとおりです。
ロギングの一部のサポートが利用可能です。ただし、logging パッケージはプロセス共有ロックを使用しないため、(ハンドラのタイプによっては) 異なるプロセスからのメッセージが混同される可能性があることに注意してください。
では、間違ったロギング ハンドラーを使用すると、get_logger ロガーでさえ問題が発生する可能性があります。しばらくの間、ログに get_logger を使用するプログラムを使用しました。ログを StreamHandler に出力し、(どうやら) 混同されることはありません。
今私の理論は:
- multiprocessing.get_logger はプロセス共有ロックをまったく行いません
- StreamHandler はマルチプロセッシングで機能しますが、FileHandler は機能しません
- この get_logger ロガーの主な目的は、プロセスのライフサイクルを追跡することであり、プロセスの名前/ID の種類を既にログに記録する、入手が簡単ですぐに使用できるロガーを提供することです。
質問は次のとおりです。
私の理論は正しいですか?
この get_logger をどのように/なぜ/いつ使用しますか?