문제

여기서 나의 첫 번째 질문입니다. ScheduledThreadPoolExecutor를 사용하여 Java에서 Java에서 병렬 파이썬 스크립트 (즉, 동일한 스크립트의 여러 인스턴스)를 실행하려고합니다.내가하려고했던 것은 ProcessBuilder 클래스를 사용하고있었습니다.개념을 테스트하려면 첫 번째 스크립트를 무한 루프에 넣었습니다. 두 번째 루프가 파일을 쓰고 종료 할 무언가를 씁니다.파이썬 스크립트는 서로와 동일해야합니다. 그래서이 두 가지가 Runnable을 구현하는 동일한 클래스의 여러 인스턴스 에서이 두 개를 실행하려고 시도했습니다.

그러나 두 번째 스크립트가 시작되지 않습니다.나는 똑같은 runnable을 가진 많은 수업을 생성하여 이것을 해결할 수 있었다.그러나 동일한 10-20 개의 클래스를 갖는 것이 매우 비실용적으로 보입니다.그래서 나는이 일을 하나의 Runnable에서 어떻게 든 할 수 있습니까? 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).내가하려는 것을 올바르게 이해하면 하나의 MyTask1 만 예약해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top