这是我这里的第一个问题。 我正在使用ScheduledThreadPoolExecutor定期从Java运行并行Python脚本(即相同脚本的多个实例)。我尝试做的是使用processBuilder类。要测试概念,我将第一个脚本放入无限循环,而第二个写入文件并退出。我需要制作的Python脚本应该彼此相同,因此我尝试从一个同一类的多个实例运行这两个,该类实现可运行的。

然而,第二个脚本永远不会启动。我设法通过创建许多具有完全相同的类的类来解决此问题。但是有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)。如果我正确地了解你想要做什么,则仅调度一个世代古代替代代码应该足够了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top