Domanda

Questa è la mia prima domanda qui. Sto cercando di eseguire script Python parallelo (cioè più istanze di uno stesso script) da Java periodicamente usando il programma programmatoThreadPoolExecutor.Quello che ho provato a fare stava usando la classe ProcessBuilder.Per testare il concetto che ho messo il primo script in loop infinito mentre il secondo scrive qualcosa per archiviare ed esce.Script Python Devo fare Deve essere identico a vicenda, quindi ho provato a eseguire questi due da più instarse di una stessa classe che implementa il correble.

Comunque il secondo script non inizia mai.Sono riuscito a risolverlo creando molte classi che hanno esattamente la stessa rigabile.Ma sembra molto pratico avere 10-20 classi che sono le stesse.Quindi posso fare questo in qualche modo in un modo in un unico runnico? Ecco il codice che mostra come ho provato a eseguire script utilizzando il 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();
    }

}
}
.

È stato utile?

Soluzione

C'è un errore di battitura nella linea Avvio del 2 ° processo:

Process process2 = processBuilder.start();
.

dovrebbe essere ovviamente:

Process process2 = processBuilder2.start();
.

Inoltre stai pianificando 2 attività, in cui ogni attività avvia 2 processi.Quindi ogni 2 secondi ci sono 4 processi avviati (2x test.py, 2x test2.py).Se capisco correttamente quello che stai cercando di fare, la programmazione solo un MyTask1 dovrebbe essere sufficiente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top