Как запустить параллельные сценарии Python от Java, используя ProcessBuilder

StackOverflow https://stackoverflow.com//questions/22068564

Вопрос

Это мой первый вопрос здесь. Я пытаюсь запустить параллельные сценарии Python (это несколько экземпляров одного и того же сценария) от Java, периодически используя планируемыйthredPoolExecutor.То, что я пытался сделать, использовал класс ProcessBuilder.Чтобы проверить концепцию, я поставил первый скрипт в бесконечную петлю, пока второй пишет что-то, чтобы подать и выходить из строя.Сценарии Python Мне нужно сделать, должны быть идентичны друг другу, поэтому я попытался запустить эти два из нескольких интервенций одного класса, который реализует 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).Если я правильно понимаю то, что вы пытаетесь сделать, планирует только один генеракодицетагкод должен быть достаточно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top