質問

クラスター上の並列Pythonを使用して、いくつかの科学的コンピューティングのメンテナンスを継承しました。並列Pythonを使用すると、JobsはPPServerに提出されます。これは(この場合)他のコンピューターですでに実行されているPPServerプロセスと話し合い、PPWorkersプロセスにタスクを課します。

標準のライブラリロギングモジュールを使用して、PPServerに送信される関数からのエラーとデバッグ情報を記録したいと思います。これらのPPWorkerは個別のプロセスとして(別々のコンピューターで)実行されるため、ロギングを適切に構成する方法がわかりません。プロセスごとに個別のファイルにログする必要がありますか?たぶん、それをすべて改善するログハンドラーがありますか?

また、どのコンピューターがエラーにヒットしたかについてのどのプロセスについてレポートが必要ですが、ログインしているコードはおそらくこれらのことを認識していません。たぶんそれはppserverレベルで起こるはずですか?

(並列Pythonフォーラムでクロスポストされた質問のバージョン、非ユーザーからこれについて何かを手に入れたらここに答えを投稿します)

役に立ちましたか?

解決

問題を解決する1つの方法は、次のことを行うことです。

  1. 各ワーカープロセスでは、aを使用します logging.handlers.SocketHandler 労働者から専用のロガープロセスにイベントを送信します。
  2. ドキュメントで指定された作業例に基づいて、ソケットでのロギングイベントを聴く専用のロガープロセスを作成します https://docs.python.org/3/howto/logging-cookbook.html#sending-and-ceiviving-logging-events-across-a-network
  3. 利益 ;-)

労働者機能で例外をキャッチしてログに記録すると、すべての労働者のエラーの可視性を1か所で取得できるはずです。

他のヒント

Pythonを使用します loggingsocket API。例に従ってください ここ.

単に開始します ppworker どこかでロギングすることに専念し、新しいものを作成します logging.Logger 他のそれぞれの労働者で logging.SocketHandler ロギングを実行しているマシンのホスト名とポートの指定 ppworker.

Syslogサーバーが実行されている場合は、Pythonの使用も使用できます。 syslog 文書化されたモジュール ここ.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top