ProcessBuilderを使用してJavaからParallel Pythonスクリプトを実行する方法
-
23-12-2019 - |
質問
これは私の最初の質問です。 ScheduleDthreadPoolExecutorを使用して、JavaからParallel Pythonスクリプト(それは同じスクリプトのインスタンスである)を実行しようとしています。私がやろうとしたことはProcessBuilderクラスを使用していました。概念をテストするには、最初のスクリプトを無限ループに入れていますが、2番目のスクリプトはファイルをファイルと終了するものを書き込みます。Pythonスクリプトを作成する必要があるPythonスクリプトは互いに同一であるべきですので、Runnableを実装する同じクラスの複数のインスタンスからこれら2つを実行しようとしました。
しかし2番目のスクリプトは始まりませんでした。私はこれを解決することができましたが、同じRunnableを持つ多くのクラスを作成します。しかし、同じである10~20のクラスを持つことは非常に実用的ではないようです。だから私はこれを何度も実行可能な内にしてもらえますか? これがProcessBuilderを使用してスクリプトを実行しようとした方法を示すコードです。
public class TestScripts{
public static void main(String[] args){
ScheduledThreadPoolExecutor threadPool = new ScheduledThreadPoolExecutor(2);
threadPool.scheduleAtFixedRate(new MyTask1(), 1,2, TimeUnit.SECONDS);
threadPool.scheduleAtFixedRate(new MyTask1(), 1,2, TimeUnit.SECONDS);
}
}
class MyTask1 implements Runnable{
public void run(){
System.out.println("Task1 is running");
ProcessBuilder processBuilder = new ProcessBuilder("C:\\Python27\\python.exe",
"C:\\Python27\\test.py");
ProcessBuilder processBuilder2 = new ProcessBuilder("C:\\Python27\\python.exe",
"C:\\Python27\\test2.py");
processBuilder.redirectOutput(Redirect.INHERIT);
try {
Process process = processBuilder.start();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
Process process2 = processBuilder.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
. 解決
2番目のプロセスを開始する行にはタイプがあります。
Process process2 = processBuilder.start();
.
もちろん:
Process process2 = processBuilder2.start();
.
あなたは2つのタスクをスケジュールしています。各タスクは2つのプロセスを開始します。そのため、2秒ごとに4つのプロセスが開始されます(2x test.py、2x test2.py)。私があなたがしようとしていることを正しく理解しているならば、1つのMyTask1
のみをスケジュールすることは十分であるべきです。
所属していません StackOverflow