私はIPythonを初めて使い、IPython並列クラスタ機能を実行している間に中間結果をstdoutに出力したいと考えています。 (私は、複数のプロセスがあると、これが出力を変える可能性があることに気付いていますが、それはテスト/デバッグのためのものであり、実行しているプロセスは十分長いので、そうした衝突は起こりそうもありません。 IPythonのドキュメントですが、並列化された関数が出力される例は見つかりません。 は基本的に、私はメインの標準出力、プロセス内の印刷が動作しませんIPython並列プロセスでstdoutに印刷
subprocess.Popen(... , stdout=...)
のIPythonと同等にサブプロセスの印刷出力をリダイレクトする方法を探しています:
rc = Client()
dview = rc()
def ff(x):
print(x)
return x**2
sync = dview.map_sync(ff,[1,2,3,4])
print('sync res=%s'%repr(sync))
async = dview.map_async(ff,[1,2,3,4])
print('async res=%s'%repr(async))
print(async.display_outputs())
sync res=[1, 4, 9, 16]
async res=[1, 4, 9, 16]
だから計算が正しく実行返しますが、関数FFでprint文は、すべてのプロセスがreturneていない場合でも、印刷されることはありませんd。 私は何が間違っていますか? 「プリント」を動作させるにはどうすればよいですか?
非常に有益な答えです。計算が行われている間に標準出力を見る方法はありますか? – spencerlyon2
はい - printステートメントの場合、 'out as in asyncresult.stdout:print out'を実行します。これは、出力が部分的であっても、いつでも行うことができます。 – minrk
ソースコードにアクセスすることなくこれを達成する方法はありますか?スレッドでログメッセージを出力するために私が使用しているライブラリがあり、実行時に印刷することができます。これを行うためにIPythonのクラスを拡張する必要がありますか? – hgcrpd