如何利用多CPU控制最多2个Python脚本同时运行?
控制Python脚本并发执行的解决方案
问题描述
我有一台4核PC,需要实现最多同时运行2个Python脚本的逻辑:启动2个脚本,当其中一个运行结束后立即启动下一个,始终保持不超过2个脚本在运行。后续会升级为8核,届时会调整并发数,但目前需先实现2个并发的逻辑。我当前编写的代码虽创建了进程池(Pool)但未正确使用,导致所有脚本被同时启动,不符合需求。
我的错误代码如下:
import multiprocessing from multiprocessing import Pool import os def run_script(script_file): print("Running script:", script_file) os.system("python " + script_file) if __name__ == "__main__": pool = Pool(processes=2) # start 2 worker processes #Hardcode Script Files for Now, Later Read Directory Contents and Build This Dynamically as it will grow alot script_files = ["scratch_6.py", "scratch_7.py", "scratch_8.py", "scratch_9.py", "scratch_10.py", "scratch_11.py", "scratch_12.py", "scratch_13.py"] processes = [] for script_file in script_files: process = multiprocessing.Process(target=run_script, args=(script_file,)) processes.append(process) for process in processes: process.start() for process in processes: process.join()
错误原因
你创建了进程池Pool但完全没用到它,反而手动遍历脚本列表创建了所有Process对象并一次性启动,导致所有脚本同时运行,完全没利用进程池的并发控制能力。
正确实现代码
import os from multiprocessing import Pool def run_script(script_file): print(f"Running script: {script_file} (PID: {os.getpid()})") # 替换os.system为subprocess,避免命令注入风险,同时获取执行状态 import subprocess result = subprocess.run(["python", script_file], check=False) print(f"Script {script_file} finished with return code: {result.returncode}") if __name__ == "__main__": # 并发数配置,后续升级8核时直接改这个值即可 CONCURRENT_NUM = 2 # 脚本列表,后续可改为动态读取目录生成 script_files = ["scratch_6.py", "scratch_7.py", "scratch_8.py", "scratch_9.py", "scratch_10.py", "scratch_11.py", "scratch_12.py", "scratch_13.py"] # 使用进程池管理并发,上下文管理器自动处理池的创建与销毁 with Pool(processes=CONCURRENT_NUM) as pool: # map自动分配任务,始终保持不超过CONCURRENT_NUM个进程运行 pool.map(run_script, script_files)
关键说明
- 进程池核心逻辑:
with Pool(...)上下文管理器简化了池的生命周期管理,pool.map()会自动将任务分配给worker进程,严格控制并发数,一个任务完成后立即启动下一个。 - 安全性与可维护性:用
subprocess.run替代os.system,避免脚本文件名含特殊字符时的命令注入问题,同时能获取脚本执行的返回码,便于排查问题。 - 后续扩展适配:升级到8核时,只需修改
CONCURRENT_NUM的值为8,核心逻辑无需改动,完全适配硬件升级需求。
内容的提问来源于stack exchange,提问作者ccc1997
相关产品推荐
相关产品推荐

