如何通过Python主控脚本并行运行带无限循环的多个子脚本
问题根因
你之前的尝试存在两个核心问题:
- 线程创建语法错误:
Thread(target=function_1())写法中给函数加了括号,相当于创建线程前就直接执行了function_1,死循环阻塞了后续代码,根本不会走到第二个线程的创建步骤。正确写法是仅传入函数名不加括号,即target=function_1。 - 场景适配错误:你要运行的是CPU密集型死循环任务,CPython的全局解释器锁(GIL)会限制多线程的并行效果,同一时间只会有一个线程执行CPU计算任务,这种场景更适合用多进程实现。
实现方案
分两种场景给出可直接运行的代码:
方案1:多进程运行封装好的业务逻辑
如果可以把两个子脚本的逻辑封装成函数放在主控脚本里,直接用multiprocessing库实现即可:
from multiprocessing import Process from time import sleep # 对应原script1的逻辑 def run_script1(): array_1 = [] x = 0 while True: array_1.append(x) x += 1 # 可选:加打印验证并行效果 # print(f"script1: {x}") # sleep(1) # 对应原script2的逻辑 def run_script2(): array_2 = [] x = 0 while True: array_2.append(x) x += 1 # 可选:加打印验证并行效果 # print(f"script2: {x}") # sleep(1) if __name__ == '__main__': p1 = Process(target=run_script1) p2 = Process(target=run_script2) p1.start() p2.start() p1.join() p2.join()
方案2:直接运行独立的子脚本文件
如果不想修改现有script_1.py、script_2.py的代码,直接用subprocess启动独立Python进程即可:
import subprocess import sys if __name__ == '__main__': # 启动两个子进程分别运行两个脚本 process1 = subprocess.Popen([sys.executable, "script_1.py"]) process2 = subprocess.Popen([sys.executable, "script_2.py"]) # 等待进程结束 process1.wait() process2.wait()
运行前确保script_1.py、script_2.py和主控脚本在同一工作目录下即可。
内容的提问来源于stack exchange,提问作者Simon Henn
相关产品推荐
相关产品推荐

