Pythonのmultiprocessing
モジュールを使用して、サブプロセスのログをメインプロセスから出力する方法について説明します。
ロギングの設定
まず、multiprocessing
モジュールからget_logger
関数を使用してロガーを取得します。次に、QueueHandler
を使用してログの出力先をキューに設定します。
import logging
import multiprocessing
from logging.handlers import QueueHandler
logger = multiprocessing.get_logger()
logger.setLevel("WARN")
logger.addHandler(QueueHandler(queue))
サブプロセスの作成
サブプロセスで動く関数を作成します。この関数では、multiprocessing.get_logger()
を使用してロガーを取得し、ログメッセージを出力します。
def process(i):
logger = multiprocessing.get_logger()
logger.warning(f"num {i}")
メインプロセス
メインプロセスでは、まずマネージャーとキューを作成します。次に、QueueListener
を使用してキューのログを標準出力に流します。
def main():
manager = multiprocessing.Manager()
queue = manager.Queue()
console_handler = logging.StreamHandler()
console_handler.setFormatter(logging.Formatter("%(processName)s %(message)s"))
listener = QueueListener(queue, console_handler)
listener.start()
...
listener.stop()
以上の方法で、Pythonのmultiprocessing
モジュールを使用して、サブプロセスのログをメインプロセスから効率的に出力することができます。