2
这是我的第一个问题。 我想从java定期使用ScheduledThreadPoolExecutor运行并行python脚本(这是一个相同脚本的多个实例)。我试图做的是使用ProcessBuilder类。为了测试这个概念,我把第一个脚本放到了无限循环中,而第二个脚本写入了一些文件并退出。我需要做的Python脚本应该是相同的,所以我试图从实现可运行的同一类的多个instaces中运行这两个脚本。如何使用ProcessBuilder从java运行并行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();
}
}
}
哦,这正是问题的原因。没有注意到错字!我需要从线程池中安排n个工作线程,其中每个线程在下一个时期之前几次运行相同的脚本。谢谢你,先生 – John