Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
进程运行时使用java并行执行_Java_Multithreading_Parallel Processing - Fatal编程技术网

进程运行时使用java并行执行

进程运行时使用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类: 根据

我使用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类:

根据上面的代码,它是按顺序一个接一个地执行的,并且为程序花费了更多的时间

是否有一种方法可以使用多线程并行调用这些进程,以避免最小化时间。 如果是这样,请建议代码如何执行?

使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();