我想并行运行四个.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次迭代。
答案 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()