如何在Windows中并行执行多个Python代码及三个以上Python脚本?
Hey there! Let's tackle your two parallel execution questions one by one—they’re both about running Python scripts side-by-side, but we’ll cover the Windows system-wide approach first, then dive into Spyder-specific workflows.
这里有几种实用的方法,从简单的命令行操作到可控的脚本调度都有:
方法1:用命令行/PowerShell直接后台启动
如果只是想快速跑几个脚本,不用写额外代码,直接用系统终端就行:- 在CMD里,用
start命令可以给每个脚本单独开一个窗口后台运行:
每个脚本会在独立的命令行窗口里执行,互不干扰。start python script1.py start python script2.py start python script3.py - 在PowerShell里,用
&符号可以让脚本在当前窗口后台运行,不阻塞终端:python script1.py & python script2.py & python script3.py &
- 在CMD里,用
方法2:写Python调度脚本统一管理
如果需要统一控制所有并行任务(比如等待所有脚本完成、收集输出),可以用multiprocessing模块写一个主调度脚本:import multiprocessing import subprocess def run_single_script(script_path): subprocess.run(["python", script_path]) if __name__ == "__main__": # 替换成你的脚本路径列表 target_scripts = ["script1.py", "script2.py", "script3.py"] process_list = [] for script in target_scripts: proc = multiprocessing.Process(target=run_single_script, args=(script,)) proc.start() process_list.append(proc) # 等待所有并行进程执行完毕 for proc in process_list: proc.join()运行这个主脚本,就能一次性启动所有子脚本的并行进程。
方法3:用批处理文件一键启动
把启动命令写到.bat文件里,双击就能批量运行脚本:@echo off start python script1.py start python script2.py start python script3.py exit适合不想每次手动敲命令的场景,效果和CMD的
start命令一致。
你当前用三个独立控制台手动启动的方式可行,但可以更高效地管理并行任务,推荐以下方案:
方案1:用Spyder自带的IPython并行工具
Spyder内置了IPython并行(ipyparallel)支持,步骤很简单:- 打开Spyder的Tools菜单,选择IPython Clusters,点击Start启动集群(worker数量设为你需要的并行数,比如3或更多)。
- 写一个调度脚本分发任务:
运行这个脚本,每个worker会负责执行一个脚本,实现自动化并行。from ipyparallel import Client # 连接到启动的集群 rc = Client() dview = rc[:] # 使用所有可用的worker节点 def run_script(script_path): import subprocess subprocess.run(["python", script_path]) # 要并行执行的脚本列表 target_scripts = ["script1.py", "script2.py", "script3.py"] # 分发任务到各个worker并行执行 dview.map(run_script, target_scripts)
方案2:在Spyder中调用后台进程
如果你不想手动打开多个控制台,可以在一个主脚本里用subprocess启动后台进程,还能隐藏额外的命令行窗口:import subprocess target_scripts = ["script1.py", "script2.py", "script3.py"] process_list = [] for script in target_scripts: # 配置启动参数,隐藏命令行窗口(可选) startup_info = subprocess.STARTUPINFO() startup_info.dwFlags |= subprocess.STARTF_USESHOWWINDOW # 启动后台进程 proc = subprocess.Popen(["python", script], startupinfo=startup_info) process_list.append(proc) # 可选:等待所有进程执行完成 for proc in process_list: proc.wait()这样所有脚本在后台运行,Spyder的主控制台还能正常使用,不用手动开多个窗口。
方案3:自动化打开Spyder多控制台(进阶)
如果你习惯用多个Spyder控制台,可以通过Spyder的内部API实现自动打开控制台并运行脚本,但这个方法相对复杂,前面两种方案已经能满足大多数需求,所以更推荐优先使用前两种。
内容的提问来源于stack exchange,提问作者Aravind Raj Reddy

