Python多进程执行程序

需求 : 创建多个进程执行一个可执行文件(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. 必须像这样分开传

相关推荐
寺中人10 小时前
Linux 基础命令入门实战教程:从零掌握常用操作,新手快速上手
linux·运维·服务器·shell·linux 命令·linux 基础教程·linux 入门
猎嘤一号10 小时前
博弈论(Game Theory)的理论、算法与工程
人工智能·算法·安全·博弈论
马拉AI10 小时前
腾讯开源 Agent 记忆系统,AI“换对话就忘”的问题有了新解法(附安装使用教程)
人工智能·算法·开源·科研
小张成长计划..10 小时前
【Linux】18:基础IO
linux·运维·服务器
MIXLLRED11 小时前
解决——Ubuntu远程桌面指令更换网络
linux·网络·ubuntu
MC皮蛋侠客11 小时前
Redis 系列(一):全景与最小闭环——从 `SET` 命令到内存数据结构
数据结构·数据库·redis
疯狂打码的少年11 小时前
【数据结构】队列:定义、顺序队列与链式队列
数据结构·笔记
啊哈一半醒12 小时前
Windows 虚拟机搭建 CentOS 全过程(2026 最新版 + 踩坑解决)
linux·windows·centos
离陌在学C#12 小时前
C# 重载与重写:深入理解面向对象编程的核心概念
java·c#
wunaiqiezixin12 小时前
MIT 6.S081 lazy 前置篇(lab5):缺页异常、惰性分配、写时复制、页面换出
linux·unix·os·xv6·mit6.s081