他のものを含むJavaプログラムは、入力ストリームを使用して外部のPythonアプリケーションから読み込みます。ここで外部プロセスの読み込みエラーストリームはパフォーマンスに大きく影響します
は、私はそれを読むために使用するコードは次のとおりです。
InputStreamReader isr = new InputStreamReader(p.getInputStream()),
isrError = new InputStreamReader(p.getErrorStream());
BufferedReader br = new BufferedReader(isr), brError = new BufferedReader(isrError);
new Thread() {
@Override
public void run() {
try {
while (brError.readLine() != null);
} catch (Exception e) {
}
}
}.start();
while ((line = br.readLine()) != null) { //line is a previously declared String
//do whatever with line
}
Pythonアプリケーションは、何かがうまくいかないとき(私はそれを編集することはできませんエラーがスローされますので、私は、あまりにもエラーストリームを読み込むためのスレッドを作成し、それはサードパーティ製のソフトウェアです)、何らかの理由で、私がErrorStreamを読んでいないと、最終的にInputStreamがブロックされます。
while (brError.readLine() != null);
はパフォーマンスに与える影響は少ないですか?
今はVisualVMでパフォーマンスを見ていますが、Javaソフトウェアは通常0〜5%のCPU使用率ですが、これはかなり使いやすいですが、その使用量の約60〜65%がこのループで使用されていますこのスレッドは、メインループがブロックされないようにするだけの機能です。そして、できるだけパフォーマンスを向上させる必要があります(これは産業部門に入るため、リソースを正しく使用することが非常に重要です)。
ありがとうございます。
しかし、私は本当にこのエラーについては心配していません。私は実際のInputStreamをブロックしないようにそれらを "読み"ましたが、エラーはまったく気にしません。 – Tuzane
@マユソそれを '/ dev/null'にリダイレクトしますか? – Kayaman
実際には意味がありますが、これは私の現在のソリューションよりも優れていますか?私は試してみるべきだと思う。 – Tuzane