Python でのマルチプロセッシング ロギング
Python のマルチプロセッシング モジュールを使用する場合、複数のプロセスが同じファイルハンドルを同時に処理します。デフォルトでは、mp.get_logger() によって提供されるマルチプロセッシング対応ロガーにより、sys.stderr で適切なロック メカニズムが保証されます。
ただし、マルチプロセッシング対応でないモジュールでは、マルチプロセッシング対応ロギングを使用するために変更が必要になる場合があります。これらの変更を回避するには、別のアプローチを検討してください。
カスタム ログ ハンドラー
1 つのアプローチは、パイプ経由で親プロセスにログを送信するカスタム ログ ハンドラーを作成することです。これにより、親プロセスが実際のロギングを処理しながら、モジュールが標準ロギング モジュールを使用できるようになります。実装は次のとおりです。
<code class="python">from logging.handlers import RotatingFileHandler import multiprocessing, threading, logging, sys, traceback class MultiProcessingLog(logging.Handler): def __init__(self, name, mode, maxsize, rotate): logging.Handler.__init__(self) self._handler = RotatingFileHandler(name, mode, maxsize, rotate) self.queue = multiprocessing.Queue(-1) t = threading.Thread(target=self.receive) t.daemon = True t.start()</code>
ハンドラーは、子プロセスからログ レコードを受け取り、提供されたファイル ハンドラーを使用してファイルに書き込みます。これにより、依存モジュールに変更を加える必要がなく、集中ログが確保されます。
以上がマルチプロセッシング Python アプリケーションでログを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。