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