私はPythonでいくつかの計算を行うスクリプトを持っています。このスクリプトをコンソールで実行すると、完了までに約7分かかりますが、実行するとJavaシェルには3倍の時間がかかります。私はJavaでスクリプトを実行するために、次のコードを使用します:Pythonスクリプトは、コンソールよりもJavaで3時間より長く走る理由コンソールよりもJavaシェルによる実行時間が長いですか?
this.p = Runtime.getRuntime().exec("script.py --batch", envp);
this.input = new BufferedReader(new InputStreamReader(p.getInputStream()));
this.output = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
this.error = new BufferedReader(new InputStreamReader(p.getErrorStream()));
あなたはどんな提案を持っていますか?
更新(2010年12月29日)
計算は次のようになります:
- のJavaは、Pythonにデータを送信します。
- Pythonはデータを読み取ります。
- Pythonは決定木を生成します---これは長い操作です。
- Pythonは、ツリーが準備完了であるという確認を送信します。
- Javaは確認を受け取ります。
その後、JavaとPythonの間に一連の通信がありますが、数秒かかるだけです。
更新(2010年12月29日)
すべてのご意見やご提案をいただき、ありがとうございます。私の前提が間違っていたことを知るには、1営業日かかった。私が使用したコードには「バグ」があり、実際にはコンソールとシェルで異なる計算が行われていました。私がそれを固定したとき、計算時間は同じでした。
概要:コンソールとJavaシェルで実行されるスクリプトの計算時間はほぼ同じです。 Java VMとIO通信を初期化するための追加時間は重要ではありません。
多くのIOがありますか?それとも、CPUバインドされたプロセスですか? – marcog
これはCPUバインドプロセスです。スクリプトは最初だけデータを受信しますが、これはすぐに実行されます。その後、スクリプトは非常に時間のかかる決定木を作成します。 – czuk
'input'と' error'で何をやっていますか?それを投げ捨てるか、それを記憶に残すか?そして、これらのストリームに出力するプログラムの量はどれくらいですか? – rodion