进程运行时使用java并行执行
我使用Process Runtime.getRuntime.execpath调用了三个python脚本,如下所示:进程运行时使用java并行执行,java,multithreading,parallel-processing,Java,Multithreading,Parallel Processing,我使用Process Runtime.getRuntime.execpath调用了三个python脚本,如下所示: 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类: 根据
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类:
根据上面的代码,它是按顺序一个接一个地执行的,并且为程序花费了更多的时间
是否有一种方法可以使用多线程并行调用这些进程,以避免最小化时间。
如果是这样,请建议代码如何执行?使callpy成为线程:
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 ....
}
}
}
并运行主程序中的线程:
@Mena:你可以发布一些代码,这样我就可以理解ndabc.py不是一个可执行的二进制文件了。您必须构造调用Python解释器的完整命令。因此,您发布的代码不是按顺序执行的,它根本没有执行。另外,字符串中的\将转义下一个字符。这是你真正的密码吗?@MarkoTopolnik:你说得对。正如您所知,我们不能在没有可执行二进制文件的情况下运行进程。我已经编辑了问题中的代码。你的python脚本输出什么?如果它不仅仅是一行,那么您将阻止它们,因为您没有从Java中提取它们的标准输出。您应该改为使用ProcessBuilder及其Inheritario方法。除此之外,您的进程将按照您编写的方式并发运行。@MarkoTopolnik:请建议并发运行的最佳解决方案。谢谢您的好意@MarkoTopolnik。我修改了它。现在这并不可笑!的确现在移除线程,您就有了相同的行为。然后你可以删除整个答案,因为在这一点上,代码与OP的完全相同。
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 ....
}
}
}
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();