需求 : 创建多个进程执行一个可执行文件(e.g. .exe文件),这些进程可能会有不同的命令参数,执行不同的功能
Solution : 使用Python自带的multiprocessing模块
p.start() 表示进程p开始执行,p.join( ) 表示等待进程p的结束
代码:
python
import multiprocessing
import subprocess
def run_exe(exe_name,args1='',args2='',args3=''):
#执行exe文件的代码
print(exe_name)
with open(args3,'w')as file:
subprocess.run([exe_name,args1,args2],stdout=file,stderr=file)
return
if __name__=='__main__':
exe_files =["./app_encoder",
"./app_encoder",
"./app_encoder"]
arguments1 =["--config",
"--config",
"--config"]
arguments2 =["uni_encode_RA_1.cfg",
"uni_encode_RA_3.cfg",
"uni_encode_RA_5.cfg"]
arguments3 =["uni_encode_RA_encoder_output_1.txt",
"uni_encode_RA_encoder_output_3.txt",
"uni_encode_RA_encoder_output_5.txt"]
processes =[]
for i in range(len(exe_files)):
exe = exe_files[i]
args1 = arguments1[i]
args2 = arguments2[i]
args3 = arguments3[i]
p = multiprocessing.Process(target=run_exe,args=(exe,args1,args2,args3))
processes.append(p)
p.start()
for p in processes:
p.join()
理解 :
这段代码会调用3个进程p1,p2,p3.
其中p1是执行可执行文件app_encoder, 命令参数1为--config, 命令参数2为uni_encode_RA_1.cfg(表示命令参数config的取值为uni_encode_RA_1.cfg),将输出结果输出到文件uni_encode_RA_encoder_output_1.txt中。
p2是执行可执行文件app_encoder, 命令参数1为--config, 命令参数2为uni_encode_RA_2.cfg(表示命令参数config的取值为uni_encode_RA_2.cfg), 将输出结果输出到文件uni_encode_RA_encoder_output_2.txt中。
p3是执行可执行文件app_encoder, 命令参数1为--config, 命令参数2为uni_encode_RA_3.cfg(表示命令参数config的取值为uni_encode_RA_3.cfg), 将输出结果输出到文件uni_encode_RA_encoder_output_3.txt中。
p = multiprocessing.Process(target=run_exe,args=(exe,args1,args2,args3)) 表示创建一个进程,执行run_exe这个函数,这个函数的参数为args这个参数列表
注意: 这里不能像我们平时输入给VS中那样,直接传给程序一个命令参数 --config uni_encode_RA_1.cfg. 必须像这样分开传