Python でのマルチプロセッシング ロギング
Python のマルチプロセッシング モジュールを使用する場合、複数のプロセスが同じファイルハンドルを同時に処理します。デフォルトでは、mp.get_logger() によって提供されるマルチプロセッシング対応ロガーにより、sys.stderr.
で適切なロック メカニズムが保証されます。ただし、マルチプロセッシング対応でないモジュールでは、マルチプロセッシング対応ロギングを使用するために変更が必要になる場合があります。これらの変更を回避するには、別のアプローチを検討してください。
カスタム ログ ハンドラー
1 つのアプローチは、パイプ経由で親プロセスにログを送信するカスタム ログ ハンドラーを作成することです。これにより、親プロセスが実際のロギングを処理しながら、モジュールが標準ロギング モジュールを使用できるようになります。実装は次のとおりです:
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()
ハンドラーは、子プロセスからログ レコードを受信し、提供されたファイル ハンドラーを使用してファイルに書き込みます。これにより、依存モジュールに変更を加える必要がなく、集中ログが確保されます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3