1. ホーム
  2. パイソン

[解決済み】Pythonでマルチプロセシングを使用しているとき、どのようにログを取るべきですか?

2022-04-16 22:30:38

質問

現在、フレームワークの中心的なモジュールがあり、Python 2.6を使用して複数のプロセスを生成しています。 multiprocessing モジュール . を使用しているため multiprocessing モジュールレベルのマルチプロセッシング対応ログがあります。 LOG = multiprocessing.get_logger() . 1件あたり ドキュメント このロガーはプロセス共有のロックを持っています。 sys.stderr (または任意のファイルハンドル) に複数のプロセスが同時に書き込みを行うことです。

今抱えている問題は、フレームワークの他のモジュールがマルチプロセシングに対応していないことです。私の考えでは、この中心的なモジュールに依存するすべてのモジュールに、マルチプロセシングを考慮したロギングを使用させる必要があります。それは厄介なことです。 フレームワークのクライアントはもちろんのこと、フレームワークの全クライアントに対して 私が考えていない代替案があるのでしょうか?

解決方法は?

押し付けがましくない対処法としては

  1. 各ワーカープロセスは、そのログが 別のファイル記述子 (理想的には、すべてのログエントリはタイムスタンプ付きであるべきです。
  2. コントローラプロセスでは、次のようなことができます。 一つ のいずれかを指定します。
    • ディスクファイルを使用する場合。 実行終了時にログファイルを合体させ、タイムスタンプ順に並べます。
    • パイプを使用する場合(推奨)。 すべてのパイプからその場でログを収集し、中央のログファイルに保存します。(例) 定期的に select をパイプのファイル記述子から取得し、利用可能なログエントリに対してマージソートを実行し、集中ログにフラッシュします。を繰り返す)。