Pregunta

esta es mi primera pregunta aquí.Estoy tratando de ejecutar en paralelo secuencias de comandos de python (que es varias instancias de un mismo script) de java periódicamente con el ScheduledThreadPoolExecutor.Lo que traté de hacer fue el uso de la ProcessBuilder clase.Para probar el concepto que he puesto de primer script en bucle infinito, mientras que el segundo escribe algo en un archivo y se cierra.Secuencias de comandos de Python necesito hacer debe ser idéntica a otra, por lo que trató de ejecutar estos dos desde múltiples instaces de una misma clase que implementa runnable.

Sin embargo, la segunda secuencia de comandos no se inicia.Me las arreglé para resolver esto mediante la creación de muchas clases que tienen exactamente el mismo ejecutable.Pero parece muy poco práctico tener 10-20 clases que son las mismas.Así puedo hacer esto de alguna manera dentro de un ejecutable?Aquí está el código que muestra cómo traté de ejecutar secuencias de comandos utilizando el 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();
    }

}
}
¿Fue útil?

Solución

Hay un error tipográfico en la línea de partida 2do proceso:

Process process2 = processBuilder.start();

debe ser, por supuesto:

Process process2 = processBuilder2.start();

Además de que son de la programación de la 2 tareas, donde cada tarea comienza 2 procesos.Así que cada 2 segundos hay 4 procesos iniciados (2x test.py, 2x test2.py).Si entiendo correctamente lo que estamos tratando de hacer, la programación de sólo uno MyTask1 debería ser suficiente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top