Ho uno script in Python che esegue alcuni calcoli. Quando eseguo questo script in console ci vogliono circa 7 minuti per essere completato, ma quando lo eseguo ho pensato che la shell Java richiedesse tre volte di più. Io uso seguente codice per eseguire lo script in Java:Esecuzione più lunga tramite shell Java rispetto alla console?
this.p = Runtime.getRuntime().exec("script.py --batch", envp);
this.input = new BufferedReader(new InputStreamReader(p.getInputStream()));
this.output = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
this.error = new BufferedReader(new InputStreamReader(p.getErrorStream()));
Avete qualche suggerimento perché lo script Python viene eseguito tre volte più a lungo in Java che in una console?
aggiornamento (29.12.2010)
Il calcolo va come segue:
- Java invia i dati al Python.
- Python legge i dati.
- Python genera un albero decisionale --- questa è un'operazione lunga.
- Python invia una conferma che l'albero è pronto.
- Java riceve la conferma.
Successivamente c'è una serie di comunicazioni tra Java e Python ma richiede solo diversi secondi.
aggiornamento (29.12.2010)
Grazie per tutti i vostri commenti e suggerimenti. Ci è voluto un giorno lavorativo per scoprire che la mia ipotesi era sbagliata. Il codice che ho usato ha avuto un "bug" e in effetti diversi calcoli sono stati eseguiti in console e in shell. Quando l'ho risolto, il tempo di calcolo era lo stesso.
Sommario: Il tempo di calcolo di uno script eseguito in console e in shell Java è quasi lo stesso. Il tempo aggiuntivo per inizializzare la comunicazione Java VM e IO è insignificante.
C'è un sacco di IO? O è un processo legato alla CPU? – marcog
È un processo associato alla CPU. Lo script riceve i dati solo all'inizio, ma ciò avviene rapidamente. Dopo di ciò, lo script crea un albero decisionale che richiede molto tempo. – czuk
Cosa stai facendo con 'input' e' error'? Buttandolo via o conservandolo in memoria? E quanti output generate generano questi flussi? – rodion