并行运行一个接一个的exe

时间:2017-03-20 21:56:28

标签: python linux parallel-processing

我想并行运行四个.exes。在第一个.exe的第一次迭代之后,第二个.exe必须在firts继续第二次迭代时启动,依此类推。目标是四个并行反馈数据。 exes是用Fortran 90编写的,但代码是在linux python中。

import os, threading

e = range(10)
for a in e:
    def exe1():
        os.system("./exe1")

    t1 = threading.Thread(target=exe1, args=())
    t1.start()
    t1.join()

    if a > 0:
        for b in e:
            def exe2():
                os.system("./exe2")
        t2 = threading.Thread(target=exe2, args=())
        t2.start()
        t2.join()

        if b > 0:
            for c in e
                def exe3():
                    os.system("./exe3")        

            t3 = threading.Thread(target=exe3, args=())
            t3.start()
            t3.join()

            if c > 0:
                for d in e
                    def exe4():
                    os.system("./exe4")
                t4 = threading.Thread(target=exe4, args=())
                t4.start()
                t4.join()

这是我的想法,但我没有能力并行运行它们。他们必须分别进行10次迭代。

1 个答案:

答案 0 :(得分:1)

我不会进一步评论定义函数的循环(非常奇怪)可能是因为缩进实际上是关闭的,所以可能有更多的4个并行线程(我想的那么多)。

但是要回答你的问题,你的x可执行文件并不是因为你在启动它时就在线程上使用join()而并行运行。

因此主程序在尝试启动另一个之前等待当前线程终止。

我会这样做:

thread_list = []

在你的课程开始时。

每次创建线程时,请将其引用存储在thread_list

t1 = Threading.thread(...)
thread_list.append(t1)

然后,删除程序中的所有join次调用。现在你真的在x线程中并行启动x进程。

在程序结束时等待所有线程完成:

for t in thread_list:
    t.join()