並列Pythonを使用したロギングワーカープロセス
-
25-09-2019 - |
質問
クラスター上の並列Pythonを使用して、いくつかの科学的コンピューティングのメンテナンスを継承しました。並列Pythonを使用すると、JobsはPPServerに提出されます。これは(この場合)他のコンピューターですでに実行されているPPServerプロセスと話し合い、PPWorkersプロセスにタスクを課します。
標準のライブラリロギングモジュールを使用して、PPServerに送信される関数からのエラーとデバッグ情報を記録したいと思います。これらのPPWorkerは個別のプロセスとして(別々のコンピューターで)実行されるため、ロギングを適切に構成する方法がわかりません。プロセスごとに個別のファイルにログする必要がありますか?たぶん、それをすべて改善するログハンドラーがありますか?
また、どのコンピューターがエラーにヒットしたかについてのどのプロセスについてレポートが必要ですが、ログインしているコードはおそらくこれらのことを認識していません。たぶんそれはppserverレベルで起こるはずですか?
(並列Pythonフォーラムでクロスポストされた質問のバージョン、非ユーザーからこれについて何かを手に入れたらここに答えを投稿します)
解決
問題を解決する1つの方法は、次のことを行うことです。
- 各ワーカープロセスでは、aを使用します
logging.handlers.SocketHandler
労働者から専用のロガープロセスにイベントを送信します。 - ドキュメントで指定された作業例に基づいて、ソケットでのロギングイベントを聴く専用のロガープロセスを作成します https://docs.python.org/3/howto/logging-cookbook.html#sending-and-ceiviving-logging-events-across-a-network
- 利益 ;-)
労働者機能で例外をキャッチしてログに記録すると、すべての労働者のエラーの可視性を1か所で取得できるはずです。
所属していません StackOverflow