「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > マルチプロセッシング Python アプリケーションでログを処理するにはどうすればよいですか?

マルチプロセッシング Python アプリケーションでログを処理するにはどうすればよいですか?

2024 年 11 月 8 日に公開
ブラウズ:848

How to Handle Logging in Multiprocessing Python Applications?

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