4

を使用してクラスターをセットアップしました

ipcluster start --n=8

次に、を使用してアクセスしました

from IPython.parallel import Client
c=Client()
dview=c[:]
e=[i for i in c]

時間がかかるスレーブノード(e [0] -e [7])でプロセスを実行しているので、進行状況レポートをマスターに送信して、プロセスがどこまで進んでいるかを監視できるようにします。それは。

これを行うには2つの方法が考えられますが、質問ページを何時間もトロールしているにもかかわらず、これまでのところどちらも実装できていません。

ノードがプロンプトなしでデータをマスターにプッシュバックするようにします。つまり、ノードで実行される長いプロセス内で、定期的に進行状況をマスターに渡す関数を実装します。

または、ノードの標準出力をマスターの標準出力にリダイレクトしてから、印刷を使用して進行状況を追跡することもできます。これは私がこれまで取り組んできたものです。各ノードには独自のstdoutがあるため、リモートで実行した場合、printは何も実行しません。sys.stdoutをノードにプッシュしようとしましたが、これで閉じます。

これをやりたいのは私だけだとは信じられないので、とてもシンプルなものが欠けているのかもしれません。ipythonを使用してリモートで発生する長いプロセスを追跡するにはどうすればよいですか?

4

1 に答える 1

4

stdout は既にキャプチャ、ログ、および追跡されており、結果が完了する前にクライアントに到着します。

IPython には、すべてのエンジンの stdout/err を監視するサンプルスクリプトが付属しており、この情報のサブセットのみを監視するように簡単に調整できます。

Client.metadata[msg_id].stdoutクライアント自体では、結果が完了する前に stdout/err ( ) のメタデータ dict を確認できます。zeromqClient.spin()ソケットから着信メッセージをフラッシュして、このデータが最新であることを確認するために使用します。

stdout を頻繁に更新する場合sys.stdout.flush()は、作業が完了するまで発生しない可能性がある暗黙的なフラッシュに頼るのではなく、その時点でストリームが実際に公開されていることを保証するために呼び出すようにしてください。

于 2012-03-23T19:06:26.853 に答える