2016-09-05 2 views
-4

Ich habe drei Python-Skripte, die ich anrufen bin mit Prozess Runtime.getRuntime() exec ("path") wie folgt:.Prozess Runtime ausführen parallel java

String abc= "C:\\Python27\\bin\\python.exe D:\\abc.py"; 
String efg="C:\\Python27\\bin\\python.exe D:\\efg.py"; 
callpy pyexc = new callpy(); 
pyexc.callpyQ(abc); 
pyexc.callpyQ(efg); 

callpy Klasse:

public class callpy { 
public void callpyQ (String path) throws Exception { 
    Process p = null; 
    p = Runtime.getRuntime().exec(path); 
    } 
} 

Gemäß dem obigen Code wird sequenziell nacheinander ausgeführt und benötigt mehr Zeit für das Programm.

Gibt es eine Möglichkeit, diese Prozesse parallel mit mehreren Threads aufrufen, um die Zeit zu minimieren. Wenn ja, schlagen Sie bitte den Code vor, wie man es macht?

+0

@Mena: Könnten Sie bitte etwas Code schreiben, so dass es nützlich sein wird für mich – user4047127

+0

zu verstehen 'abc.py' ist keine ausführbare Binärdatei. Sie müssen den vollständigen Befehl erstellen, der den Python-Interpreter aufruft. Es ist also nicht wahr, dass Ihr veröffentlichter Code "sequentiell ausgeführt wird", er wird überhaupt nicht ausgeführt. Plus, \ in einem String-Literal wird das nächste Zeichen entkommen. Ist das dein echter Code? –

+0

@MarkoTopolnik: Sie haben Recht. Wie Sie wissen, können wir keinen Prozess ohne die ausführbare Binärdatei ausführen. Ich habe meinen Code in der Frage bearbeitet. – user4047127

Antwort

-1

Machen callpy einen Thread:

public class callpy extends Thread{ 
private String path; 

public callpy(String p) { 
     path=p; 
} 

public void run() { 
    try { 
    Process p = null; 
    p = Runtime.getRuntime().exec(path); 
    p.waitFor(); 
    } catch (Exception ex) { 
    //somthing .... 
    } 
} 
} 

und die Fäden in der main laufen:

String abc= "C:\\Python27\\bin\\python.exe D:\\abc.py"; 
String efg="C:\\Python27\\bin\\python.exe D:\\efg.py"; 
callpy p1 = new callpy(abc); 
callpy p2 = new callpy(efg); 
p1.start(); 
p2.start(); 
//do something .... 
p1.join(); 
p2.join(); 
+0

Vielen Dank für Ihre Freundlichkeit @MarkoTopolnik. Ich habe es modifiziert. Jetzt ist es nicht lächerlich! – AhmadWabbi

+0

In der Tat. Entferne nun die Threads und du hast das gleiche Verhalten. Dann können Sie einfach die ganze Antwort löschen, da der Code zu diesem Zeitpunkt identisch mit OPs ist. –