Python用multiprocessing运行多个带循环的脚本时主循环卡住如何解决?
问题原因
- 核心错误出在
multiprocessing.Process的实例化参数上:原代码写法Process(target=load_and_run_script(key))会直接在主进程中同步调用load_and_run_script函数,执行目标脚本里的无限循环逻辑,导致主进程直接阻塞,既不会启动子进程,也无法继续后续的配置检测循环。 Process的target参数要求传入函数对象本身,函数的入参需要通过args参数单独传递,不能直接在target位置执行函数。
修复方法
只需要修改main.py中创建Process实例的一行代码即可:
将原有错误代码:
process = Process(target=load_and_run_script(key))
修改为:
process = Process(target=load_and_run_script, args=(key,))
修改后主进程不会主动执行目标脚本,只会把函数和参数传递给子进程,由process.start()触发子进程执行,主进程可以继续正常跑循环检测配置。
可选优化(按需添加)
如果需要支持手动改配置停止运行中的脚本,可以在循环中增加终止逻辑:
for key, value in list(cfg.items()): # 原有启动逻辑 if value['should_run'] and not value['running']: process = Process(target=load_and_run_script, args=(key,)) process_dict[key] = process process.start() cfg[key]['running'] = True # 新增停止逻辑 elif not value['should_run'] and value['running'] and key in process_dict: process_dict[key].terminate() process_dict[key].join() del process_dict[key] cfg[key]['running'] = False
内容的提问来源于stack exchange,提问作者Chiel
相关产品推荐
相关产品推荐

